我怎样才能在内存中处理非常巨大的文件(超过8GB)?[英] How can I handle very huge file (more than 8 GB) in memory

问题描述

嗨我正在尝试合并两个大小约为 8 GB 的大文件.但是当超过RAM内存时,要么系统崩溃,要么抛出异常.
代码的背景是它使用一个数组列表来存储来自一个非常大的记事本的多行,然后在内存中处理它们.我也试过直接在文件中处理,但是花了好几天才完成.所以我放弃了那个选项.
您能否建议我处理这种类型的大内存操作的任何其他方法.除了使用RAM之外,还有其他方法可以进行这些内存操作吗,例如使用磁盘内存(而不是使用任何文件)?

我应该使用 Arraylist 以外的任何其他对象,以便我可以使用磁盘内存而不是物理内存吗?

更新问题:
我的问题笼统地说.如何在不使用任何文本文件的情况下在后台内存中处理大小为 16 GB 的文件,以便在 RAM 约为 2 GB 的计算机中写入和读取数据.

我的要求:
它用于附加.
事情是这样的……
1) 对于 FILE 1 中的每一行,选择特定的数据
2) 完全搜索FILE 2中选中的数据,直到匹配到
如果找到,则选择具有匹配数据的行并进行一些处理,并将处理后的 FILE2 数据插入 FILE 1 的当前行的特定位置

而不是直接编辑 FILE1 (因为时间消耗非常高),我想从文件中读取数据并将其存储在内存中,然后对 的每一行进行处理通过与 FILE 2 比较,将内存中的 FILE 1 ,然后将内存中的整个数据写入新的输出文件.

我用小文件尝试了这个过程,它工作得非常快,但由于内存不足而在尝试处理大文件时失败了

提前致谢

推荐答案

http://www.daniweb.com/software-development/csharp/threads/279131[^]

要读取大文件,您可以使用streamReader.
只需在后台线程上执行 reader.ReadToEnd(),并在处理时显示选框式进度条.



//使用Buffer和stringbuilder来读取文本文件int bufferSize = 1024;var sb = new StringBuilder();var buffer = new Char[bufferSize];var 长度 = 0L;var totalRead = 0L;var count = bufferSize;使用 (var sr = new StreamReader(@"C:\Demofile.txt")){长度 = sr.BaseStream.Length;while (count > 0){count = sr.Read(buffer, 0, bufferSize);sb.Append(buffer, 0, count);总读取 += 计数;}} 

本文地址:https://www.itbaoku.cn/post/1395195.html