C# 替换嵌套的foreach以获得更好的性能
我如何调整它以获得更好的性能,我总共有200个文本框和200个标签,需要获取它们的id并根据id设置它们的文本值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)
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;
}
你能用转发器吗?