【发布时间】:2020-10-22 10:46:56
【问题描述】:
我有以下循环迭代很长时间,queryResult 有 397464 行,每行有 15 列,所以迭代次数将是 397464*15 = 5961960 + 外循环 (397464) = 6359424迭代。
问题是这需要很长时间才能导致页面超时。 可以用更有效的方式编写吗?
var rowHtml = String.Empty;
foreach (DataRow row in queryResult.Rows)
{
rowHtml += "<tr>";
for (int i = 0; i < queryResult.Columns.Count; i++)
{
rowHtml += $"<td>{row[i]}</td>";
}
rowHtml += "</tr>";
}
【问题讨论】:
-
您可以通过使用StringBuilder 而不是像这样连接字符串来显着减少执行时间和内存消耗。
-
一个简单的想法是使用
StringBuilder创建您的html。它可能会向您显示较低的时间。此外,由于所有行都是独立的,您可能希望并行处理它们,例如使用Parallel.For。 -
您可能还想使用
string.Join(但这可能证明效率低于字符串生成器)。 -
你打算用这个 HTML 做什么?您肯定不会尝试同时向您的用户显示所有 397464 行吗?
-
"397464*15 = 5961960 + 外循环 (397464) = 6359424 次迭代。" - 你的意思是串联。然后是 5961960 + 2 * 外循环 (397464) ... 对于内循环体,您“仅”有 column*row = 15 * 397464 iterations。
标签: c# performance for-loop foreach