c# - 通过大型数据表优化循环

标签 c# asp.net

我正在使用 100 到 10000 行的数据表,通过doyble循环将每一行相互比较。

for (int i = 0; i < DT1.Rows.Count; i++)
{
    for (int j = 0; j < DT1.Rows.Count; j++)
    {
        //some code to compare data
    }
}

对于 100-200 行,它在几分钟内完成,这没问题,但将几千行与几千行进行比较,需要几个小时并且没有完成。

我该怎么做才能加快速度?我想到的最好的办法是使用对象列表,而不是数据表。

还有什么建议吗?

线程可以用来做这个吗?

谢谢。

最佳答案

我最近遇到了一个我必须解决的类似情况。尽管就我而言,我正在比较一对 excel 文件。对于我的试运行,在让它工作之后,我在嵌套循环中的一侧有 530 行,另一侧有 459000 行。这大约是 2.34 亿次迭代。我的程序能够在大约 30 秒内完成它。我在这种情况下使用了 foreach:

foreach (DataRow r1 in DT1.Rows) //Loop the First Source data
{
    foreach (DataRow r2 in DT2.Rows) //Loop the Second Source data
    {
         //Comparison code here...
    }
}

编辑:在您的循环中,作为引用点,您导致在循环的每次迭代中跟踪 3 个变量,第一个和第二个是您的计数器。第三个是主要的性能影响,DT1.Rows.Count。通过将直接行计数用作循环的一部分,必须在每次迭代时重新评估它。这给程序增加了不必要的时间。如果您绝对需要有计数器,则首先分配行计数:

int DT1Count = DT1.Rows.Count;
for (int i = 0; i < DT1Count; i++)
{
    for (int j = 0; j < DT1Count; j++)
    {
        //some code to compare data
    }
}

这样,行数是静态的,并且应删除在每次迭代时评估行数所需的额外处理。

关于c# - 通过大型数据表优化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837672/

相关文章:

c# - Viewstate 上的 TextBox 值?

c# - 在列表排序中更改什么以正确排序

c# - 在 mvc razor 中更新两个局部 View 的最佳方法

c# - DI : Different implementations of the same interface for the different controllers

asp.net - 我的 system.webServer > staticContent > clientCache 元素阻碍了 CSS、JavaScript 和图像的服务

c# - ASP.Net - 新版本的代码是否仍在使用以前的程序集?

ascx 页面中的 javascript 抛出 HTTPException

c# HttpWebRequest 超时设置为零

c# - 强制基方法调用

c# - 如何将数组与 RazorEngine 一起使用?