簡體   English   中英

如何解決此System.OutOfMemoryException錯誤?

[英]How can I fix this System.OutOfMemoryException error?

因此,我開始使用ASP.NET,同時學習了一些C#,足以制作網頁。 我剛剛進行了一個基本的視覺計算器項目,即帶有單擊的精美按鈕的項目。 這是我的C#代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ExtraCredit_GraphicCalculator : System.Web.UI.Page
{
    string number1 = "";
    string number2 = "";
    bool EnteringNumber1 = true;
    bool EnteringNumber2 = false;
    protected void Page_Load(object sender, EventArgs e)
    {
        while (EnteringNumber1)
        {

            Enter9.Click += (s, args) =>
            {
                number1 = number1 + "9";
            };

            Enter8.Click += (s, args) =>
            {
                number1 = number1 + "8";
            };
            Enter7.Click += (s, args) =>
            {
                number1 = number1 + "7";
            };
            Enter6.Click += (s, args) =>
            {
                number1 = number1 + "6";
            };
            Enter5.Click += (s, args) =>
            {
                number1 = number1 + "5";
            };
            Enter4.Click += (s, args) =>
            {
                number1 = number1 + "4";
            };
            Enter3.Click += (s, args) =>
            {
                number1 = number1 + "3";
            };
            Enter2.Click += (s, args) =>
            {
                number1 = number1 + "2";
            };
            Enter1.Click += (s, args) =>
            {
                number1 = number1 + "1";
            };
            Enter0.Click += (s, args) =>
            {
                number1 = number1 + "0";
            };
            Result.Text = number1;
        }
    }
}

只需注意幾件事,這些Event#。每個東西都與一個數字按鈕相關,因此使用Enter7.Click,單擊標記為7的按鈕,它會執行某些操作。 最后,Result.Text與顯示結果的Label相關。 現在,我只希望能夠看到每次單擊按鈕的結果,但是我計划添加第二個數字的函數以及諸如指數和平方根的數學函數。

我究竟該怎么做才能解決此錯誤?

首先, EnteringNumber1始終為true,因此您的Page_Load方法永遠不會退出。 它只會繼續添加事件處理程序,這可能會導致您的內存錯誤。 知道Page_Load是在頁面的初始化部分觸發的事件。 通常,您將使用此方法在控件中設置屬性並建立數據庫連接(有關更多信息,請參見頁面生命周期概述 )。

記住HTML是靜態的,而asp.net所做的只是在服務器上創建這些靜態html頁面。 您將要刪除無限循環,並讓事件注冊一次。

您還需要處理click事件中值的某種顯示。

在這種情況下,我真的看不到您的Page_Load處理程序發生了什么事情。 您可以根據需要為每個按鈕創建單獨的事件處理程序(以后可以簡化此操作)。 默認情況下,當用戶單擊頁面上的按鈕時,會發生向服務器的回發,並且服務器會進行一些計算並返回該頁面的新版本。 最后,您將獲得類似於以下內容的內容:

protected void Page_Load(object sender, EventArgs e)
{
     if(!Page.IsPostBack()) // we only want this stuff to happen on initial load        
     {
         hiddenField.value = 0; 
     }
}

protected void Enter9_OnClick(object sender, EventArgs e)
{
    // a postback to the server just happened
    hiddenField.value = (double)hiddenField.value + 9;
}

....
....

請注意,此代碼未經測試,可能不是100%正確,但是它為您提供了asp.net的基本原理。

現在,當您對頁面生命周期感到滿意時,您真正想要做的是a)使用javascript處理客戶端計算或b)整理從客戶端代碼到服務器(將在其中進行計算)的調用,然后使用簡單的方法返回阿賈克斯 查看jQuery,以幫助客戶端。

我看到的一個大錯誤是,您永遠不會將EnteringNumber1設置為false,因此在頁面加載時,您將遇到一個無限循環,並且在該無限循環中,您將反復為按鈕注冊事件處理程序,從而繼續分配內存。

轉儲循環。 不需要它。 確保您的結果也進入了asp中的輸入字段,以便在按下另一個按鈕時,可以將數字“加”到已經建立的數字上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM