c# - 使用清单在虚拟内存或内存映射文件中
问题描述
我有 46 GB TXT 文件
我需要删除重复和其他方法
我认为需要加载到内存中并且没有足够的可用空间...
任何人都有办法将 46 GB TXT 文件加载为4GB RAM 作为虚拟内存或内存映射文件List<T>
或在 4GB RAM 上加载?object
不需要速度或性能!
解决方案
以随机访问方式打开文件,但按顺序读取。每当您读取整行时,计算该行的哈希码,并检查您是否已经计算过该哈希码。将哈希码与行的文件偏移量一起存储在MultiValueDictionary中(哈希码作为键,文件偏移量作为值)。因此,每当您读取新行并计算其哈希码时,您都会检查您是否已经拥有哈希码。如果你有它,那么你还必须验证行是否逐字节匹配(并且你有前几行的一个或多个文件偏移量,所以如果这些行中的一个与当前行逐字节匹配,那么你有一个重复)。
如果您有重复的行,请继续阅读。如果您有新行,则将该行写入新文件中。这个新文件最后将只包含唯一的行。
您必须记住原始文件的进度,因为您将来回走动。回去比较旧行,再读新行。
推荐阅读
- react-native - Stock React Native 应用程序不会在 iOS 上构建(asdf?)
- swift - 如何在 swift 5.0 中检测苹果硅 (M1) 与英特尔?
- powershell - 有没有一个命令可以让我重命名一个只有一定数量的数字的目录?
- git - 在 GitHub Actions 中管理机密
- javascript - 使用 filter() 而不是 map() 来修改对象数组?
- javascript - 在 Asp.Net MVC 中开发屏幕录制应用程序
- python - 使用 python + psexec 在多个设备中运行 .exe 文件
- sql - 大写替换(Split_Part())
- sql - 需要使用 sequelize 解析来自数据库的响应
- flutter - 如何使用 base64 对飞镖图像对象进行编码