我正在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