【发布时间】:2012-11-05 03:19:39
【问题描述】:
我要读取大 TXT 文件,大小为 500 MB, 首先我使用
var file = new StreamReader(_filePath).ReadToEnd();
var lines = file.Split(new[] { '\n' });
但它抛出了内存异常然后我尝试逐行读取,但在读取了大约 150 万行后它又抛出了内存异常
using (StreamReader r = new StreamReader(_filePath))
{
while ((line = r.ReadLine()) != null)
_lines.Add(line);
}
或者我用过
foreach (var l in File.ReadLines(_filePath))
{
_lines.Add(l);
}
但我又收到了
“System.OutOfMemoryException”类型的异常发生在 mscorlib.dll 但未在用户代码中处理
我的机器是具有 8GB 内存的强大机器,所以它不应该是我的机器问题。
p.s:我尝试在 NotePadd++ 中打开此文件,但收到“文件太大无法打开”异常。
【问题讨论】:
-
问题是什么?你只是在描述事物。
-
将所有内容存储在集合中的意义何在?
-
您说的是“500 行”,但就 bytes 和 characters 而言,文件有多大? 500 行 80 个字符应该不是问题 - 每行 500 行 10 亿个字符显然是。
-
@Behnam - 8GB 内存中有 500GB 文件?那不合适。您将需要找到其他处理文件的方法,这不需要内存中的全部内容。每行处理(或者可能是少量行)
-
您可以通过不将整个文件加载到内存中来修复它。显然,您的设计不适合应用程序的需求。您最终将如何处理这些数据?任何处理,过滤等?也许您需要先将其存储在数据库中。
标签: c# .net exception .net-4.0 out-of-memory