提高DataTable性能

时间:2010-09-03 20:11:24

标签: c# .net performance datatable dataset

我有一个DataTable,其中包含250,000条记录,包含5列,我正在迭代至少500,000次。

具有1000条记录的表格之间的性能差异是巨大的,我可以理解并理解为什么 - 但是有没有办法改善性能?

3 个答案:

答案 0 :(得分:3)

我将假设您有充分的理由在列表上迭代500,000次。

根据您每次迭代所做的工作,您可能能够从工作负载的一些平行化中受益。看一下TPL,您可以使用Parallel.ForEach将工作分解为可以同时运行的任务。这样,您就可以利用功能更强大的硬件和更多CPU内核。

当然,如果你可以在更少的迭代中完成更多的工作,你也可能会获得一些性能,但是如果不知道你在做什么,可以提供的唯一建议是高层次的想法,而不依赖于实际的问题域。

答案 1 :(得分:2)

另一个解决方案是将其转换为对象列表,很可能只是通过在不同的结构上使用它可以更快地迭代

如果你没有写每次迭代的数据,你肯定会受益于多线程(并行化)

答案 2 :(得分:1)

我同意你应该有充分的理由在代码方面处理250k行500k次。发布一些伪代码和你想要完成的基本想法。

我现在假设你必须超过250k记录500k次。也许是分形系列。如果你对算法做两个相对简单的事情,我认为你会大大提高性能。

  1. 将DataTable中的每个DataRow读取到您创建的POCO对象中,并创建这些对象的列表。 DataRows和DataTables使用起来非常昂贵,因为它们旨在处理任何行或表,因此如果您了解数据结构,它们会有很多开销。将它们拉出来然后在完成后重新投入的一次性费用将被支付499,999次。

  2. 并行化流程。寻找在2到5个工作进程之间拆分每个迭代的方法;比你的CPU核心多一个。你不会把时间划分那么多,但你会看到显着的改善。不要给迭代的每一步都给它自己的过程;你将用管理它们的开销阻塞CPU。