在磁盘上填充C#DataTable而不是“在内存中”以避免内存溢出

时间:2012-06-11 12:11:07

标签: c# datatable

我需要从两个不同的数据库中填充两个DataTable进行一些比较和只读操作。这需要我"select *"进入这两个DataTable

但是,我需要检索的表在两个数据库中包含大约300万行。我在填写时得到OutOfMemoryException

是否有可能将这些DataTable放在磁盘而不是内存中? 您是否看到任何其他解决方案在这两个巨大的集合上进行比较/执行只读?我需要做的事情使得批量行的子集进行处理变得非常复杂。

2 个答案:

答案 0 :(得分:1)

我的猜测是,执行此操作的理想/有效方式是在数据库中执行此操作。不幸的是,您的两个表位于两个独立的数据库中,这可能会导致并发症。

这些表位于同一服务器上的两个不同数据库中(如SQL Server实例中),还是位于两个独立的服务器中?如果它们位于同一服务器/实例中,那么您可以在数据库服务器上执行比较逻辑。

否则,如果这些表位于不同的服务器上,那么是否有可能在数据库之间设置某种复制,以便您可以将这两个数据集合并到一个数据库中,以便进行比较?

答案 1 :(得分:1)

如何用钥匙对它们进行排序呢。

set1    A  A  A  B  C            E
                 |            
set2             B       D

然后你可以继续使用set1,更改为set2,返回set1 ...使迭代变得更加容易。