簡體   English   中英

ASP.NET C#優化代碼

[英]asp.net c# optimizing code

只是覺得我在這里浪費循環= CPU時間,並且想知道是否有一種方法可以優化此代碼,或者只是將其最小化。

基本上,代碼的作用是通過editOkkInfo控件內的每個控件。 檢查當前控件是否為文本框,如果是,則它將執行一些操作,如果否,則跳至下一個if語句。 下一條語句檢查是否計數了14次(因為我只有14個文本框),如果不是14,則循環繼續,如果計數為14,則循環中斷。

感謝您的任何幫助,在此先感謝,這里的代碼非常歡呼。

iterate = 0;
foreach (System.Web.UI.Control ctrl in this.editOkkInfo.Controls)
{
    if (ctrl is TextBox)
    {
        tb = (TextBox)this.FindControl(ctrl.ClientID.ToString());
        tb.Text = dt.DefaultView[0][iterate++].ToString();
    }
    if (iterate == 14)
       break;
}

您已經擁有控件,因此無需使用FindControl 只需投放:

iterate = 0;

foreach (System.Web.UI.Control ctrl in this.editOkkInfo.Controls)
{
    if (ctrl is TextBox)
    {
        tb = (TextBox)ctrl;
        tb.Text = dt.DefaultView[0][iterate++].ToString();
    }

    if (iterate == 14)
        break;
}

可讀性的進一步提高將消除所有控件和is測試的循環:

foreach (TextBox ctrl in this.editOkkInfo.Controls)
{
    ctrl.Text = dt.DefaultView[0][iterate++].ToString();

    if (iterate == 14)
        break;
}

您可以通過強制轉換ctrl變量來保存FindControl()解析:

tb = (TextBox) ctrl;
tb.Text = //...

並且,我們應該知道editOkkInfo.Controls是通過代碼創建還是在aspx頁面中聲明。 如果前者為true,則可以將對此類對象的引用保存在變量中,然后使用它而不是循環。

if (ctrl is TextBox)
{
    tb = (TextBox)ctrl;
}

這應該足夠了,您知道使用了FindControl來查找TextBox因此,您可以將TextBox投射到TextBox

我已經看到一種更快的方法來查找特定類型的所有控件,而不是循環。 這似乎更有效。 使用linq獲取網頁中某些類型的Web控件的列表希望對Milind有幫助

我認為反而foreach會更好一些,因為一會兒不會檢查所有控件,直到數量為14為止(能否檢查所有控件,取決於!)

暫無
暫無

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

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