我正在C#中处理大型文件(希望),并且需要一种方法来确定文件每列中不同值的数量。我已经阅读了所有我能找到的有关使用C#确定不同值的问题。面临的挑战是,由于某些文件的大小和一列(可能有数百列 - 各种数据类型)中数千万个不同值的可能性,因此需要创建列表,字典或数组等等。每一列 - 然后使用先前回答的问题中描述的技术 - 会使我处于达到2 GB内存限制的危险中。需要在非常大的文件中的每列中查找不同值的数量
目前,我正在读取/处理文件一行一行,并对每行“清理和清理”数据,更新聚合结果,然后将每个处理的行写入输出文件,然后将其批量插入到SQL 。到目前为止的表现实际上相当不错。
由于数据最终落在MS SQL中,作为后备我可以使用SQL来确定不同的值,但我希望能够在登陆SQL之前完成此操作。任何想法或建议表示赞赏。
更新:对于每个字段,我创建了一个哈希表并为每个字段添加了新的不同值。在处理结束时,我使用 myDistinctValues.Count 获取计数。这工作正常的小文件,但正如我担心的,我得到一个大文件
System.OutOfMemoryException
抛出。根据一个建议,我曾尝试添加到我的应用程序配置
<runtime>
<gcAllowVeryLargeObjects enabled="true"/>
</runtime>
但这并没有帮助。
Wirh这个严格的要求只有某种持久性BTree浮现在脑海。 – bamanow
什么2GB内存限制?如果为AnyCPU体系结构编译并在x64机器上运行,则不应该有这样的限制。 –
@KevinAnderson,我指的是:https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/ – AndrewBanjo1968