首页 > 解决方案 > 使用清单在虚拟内存或内存映射文件中

问题描述

我有 46 GB TXT 文件

我需要删除重复和其他方法

我认为需要加载到内存中并且没有足够的可用空间...

任何人都有办法将 46 GB TXT 文件加载为4GB RAM 作为虚拟内存或内存映射文件List<T>或在 4GB RAM 上加载?object

不需要速度或性能!

标签: c#virtual-memorymemory-mapped-files

解决方案


以随机访问方式打开文件,但按顺序读取。每当您读取整行时,计算该行的哈希码,并检查您是否已经计算过该哈希码。将哈希码与行的文件偏移量一起存储在MultiValueDictionary中(哈希码作为键,文件偏移量作为值)。因此,每当您读取新行并计算其哈希码时,您都会检查您是否已经拥有哈希码。如果你有它,那么你还必须验证行是否逐字节匹配(并且你有前几行的一个或多个文件偏移量,所以如果这些行中的一个与当前行逐字节匹配,那么你有一个重复)。

如果您有重复的行,请继续阅读。如果您有新行,则将该行写入新文件中。这个新文件最后将只包含唯一的行。

您必须记住原始文件的进度,因为您将来回走动。回去比较旧行,再读新行。


推荐阅读