在“磁盘上”而不是“内存中”填充 C# 数据表,以避免内存溢出
本文关键字:内存 数据表 溢出 填充 磁盘上 磁盘 内存中 | 更新日期: 2023-09-27 18:36:58
我需要从两个不同的数据库中填充两个DataTable
以进行一些比较和只读操作。这就需要我"select *"
这两个DataTable
。
但是,我需要检索的表在两个数据库中都包含大约 300 万行。我在填充时得到一个OutOfMemoryException
。
是否有可能将这些DataTable
放在磁盘上而不是内存中?您是否看到任何其他解决方案可以在如此巨大的集合上比较/执行只读?我需要做的事情使得按行子集的批次进行变得非常复杂。
我的猜测是,执行此操作的理想/有效方法是在数据库中执行此操作。 遗憾的是,您的两个表位于两个单独的数据库中,这可能会导致并发症。
这些表是在同一台服务器上的两个不同数据库中(如在 SQL Server 实例中),还是位于两个单独的服务器中? 如果它们位于同一服务器/实例中,则可以在数据库服务器上执行比较逻辑。
否则,如果这些表位于不同的服务器上,那么是否有可能在数据库之间设置某种复制,以便您可以将两个数据集放入一个数据库中,以便您可以执行比较?
按键对它们进行排序怎么样?
即
set1 A A A B C E
|
set2 B D
然后你可以继续 set1,切换到 set2,回到 set1...使迭代变得更加容易。