C# 替换嵌套的foreach以获得更好的性能

C# 替换嵌套的foreach以获得更好的性能,c#,asp.net,C#,Asp.net,我如何调整它以获得更好的性能,我总共有200个文本框和200个标签,需要获取它们的id并根据id设置它们的文本值 foreach (TabPage t in ASPxPageControl1.TabPages) { foreach (ASPxFormLayout formly in t.Controls) { foreach (LayoutGroup grp in formly.Items)

我如何调整它以获得更好的性能,我总共有200个文本框和200个标签,需要获取它们的id并根据id设置它们的文本值

foreach (TabPage t in ASPxPageControl1.TabPages)
        {
            foreach (ASPxFormLayout formly in t.Controls)
            {
                foreach (LayoutGroup grp in formly.Items)
                {
                    foreach (LayoutItem itm in grp.Items)
                    {
                        foreach (var control in itm.Controls)
                        {

                            if (control is ASPxLabel)
                            {
                                string a = ((ASPxLabel)control).ID.Remove(((ASPxLabel)control).ID.Length - 4);
                                ((ASPxLabel)control).Text = fonction1(a);
                            }
                            else if (control is ASPxTextBox)
                            {
                                string b = ((ASPxTextBox)control).ID.Remove(((ASPxTextBox)control).ID.Length - 4);
                                ((ASPxTextBox)control).Text = fonction2(b);
                            }
                        }
                    }
                }
            }
        }

我怀疑此解决方案是否有任何性能改进,因为您需要处理版面中的每个项目,并相应地将其转换为
ASPxLabel
aspxtbox
,不是吗?因此,您所能做的一切都是使用Linq进行某种语法转换:

foreach(var c in ASPxPageControl1.TabPages
        .SelectMany(x => x.Controls)
        .SelectMany(x => x.Items)
        .SelectMany(x => x.Items)
        .SelectMany(x => x.Controls) { ... }
然而,这将产生或多或少相同的IL代码,因此性能不会得到提高


无论如何,我怀疑您的性能问题——即使存在,我也怀疑这段代码中的问题——来自这段代码。您应该明确地考虑使用诸如dotTrand之类的分析工具,以找出您的软件中的哪些部分运行缓慢——您将得到对实际大点的支持。

对于每个s,您不太可能改进嵌套<代码>,因为LINQ将在引擎盖下执行。你可以通过不多次施放来获得改进。例如,改变这一点:

if (control is ASPxLabel)
{
    string a = ((ASPxLabel)control).ID.Remove(((ASPxLabel)control).ID.Length - 4);
    ((ASPxLabel)control).Text = fonction1(a);
}
else if (control is ASPxTextBox)
{
    string b = ((ASPxTextBox)control).ID.Remove(((ASPxTextBox)control).ID.Length - 4);
    ((ASPxTextBox)control).Text = fonction2(b);
}
为此:

var label = control as ASPxLabel

if (label != null)
{
    string a = label.ID.Remove(label.ID.Length - 4);
    label.Text = fonction1(a);
    continue;
}

var textBox = control as ASPxTextBox

if (textBox != null)
{
    string b = textBox.ID.Remove(textBox.ID.Length - 4);
    textBox.Text = fonction2(b);
    continue;
}

你能用转发器吗?