读取大TXT文件,内存不足异常

Beh*_*nam 15 .net c# exception out-of-memory .net-4.0

我想读大TXT文件大小是500 MB,首先我使用

var file = new StreamReader(_filePath).ReadToEnd();  
var lines = file.Split(new[] { '\n' });
Run Code Online (Sandbox Code Playgroud)

但它抛出内存异常然后我试图逐行读取但是在读取大约150万行之后再次抛出内存异常

  using (StreamReader r = new StreamReader(_filePath))
         {            
             while ((line = r.ReadLine()) != null)            
                 _lines.Add(line);            
         }
Run Code Online (Sandbox Code Playgroud)

或者我用过

  foreach (var l in File.ReadLines(_filePath))
            {
                _lines.Add(l);
            }
Run Code Online (Sandbox Code Playgroud)

但我又一次收到了

mscorlib.dll中出现"System.OutOfMemoryException"类型的异常,但未在用户代码中处理

我的机器是功能强大的机器,有8GB的内存,所以它不应该是我的机器问题.

ps:我试图在NotePadd ++中打开这个文件,我收到'文件太大而无法打开'异常.

L.B*_*L.B 34

只需使用File.ReadLines,它返回一个IEnumerable<string>并且不会立即将所有行加载到内存中.

foreach (var line in File.ReadLines(_filePath))
{
    //Don't put "line" into a list or collection.
    //Just make your processing on it.
}
Run Code Online (Sandbox Code Playgroud)

  • @Behnam 我刚刚用 8.7GB 文本文件(120,000,000 行)测试了它并且运行良好。 (2认同)