asp.net c#优化代码

时间:2012-11-22 11:17:21

标签: c# asp.net optimization refactoring

只是觉得我在这里浪费循环= 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;
}

5 个答案:

答案 0 :(得分:3)

没有必要使用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;
}

答案 1 :(得分:1)

您可以通过强制转换ctrl变量来保存FindControl()解析:

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

而且,我们应该知道editOkkInfo.Controls是由代码创建还是在aspx页面中声明。如果前者为真,则可以在变量中保存对此类对象的引用,然后使用它而不是循环。

答案 2 :(得分:1)

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

这应该已经足够了,您正在使用TextBox查看FindControl,知道您拥有它。所以,您可以将控件转换为TextBox

答案 3 :(得分:0)

我已经看到了一种更快的方法来查找特定类型的所有控件而不是循环。 这似乎更有效。 Using linq to get list of web controls of certain type in a web page 希望有所帮助 Milind

答案 4 :(得分:-2)

我认为反而foreach更好一段时间,因为有一段时间不会检查所有控件,直到金额为14(可以检查所有控件,取决于!)