私は、3.2GB の固定幅区切りテキスト ファイルを処理する任務を負っています。各行の長さは 1563 文字で、テキスト ファイルには約 210 万行あります。約 100 万行を読み取った後、メモリ不足の例外エラーでプログラムがクラッシュします。
Imports System.IO
Imports Microsoft.VisualBasic.FileIO
Module TestFileCount
''' <summary>
''' Gets the total number of lines in a text file by reading a line at a time
''' </summary>
''' <remarks>Crashes when count reaches 1018890</remarks>
Sub Main()
Dim inputfile As String = "C:\Split\BIGFILE.txt"
Dim count As Int32 = 0
Dim lineoftext As String = ""
If File.Exists(inputfile) Then
Dim _read As New StreamReader(inputfile)
Try
While (_read.Peek <> -1)
lineoftext = _read.ReadLine()
count += 1
End While
Console.WriteLine("Total Lines in " & inputfile & ": " & count)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
_read.Close()
End Try
End If
End Sub
End Module
これは、テキスト ファイルを一度に 1 行ずつ読み取る非常に単純なプログラムなので、バッファ内のメモリをあまり消費しないはずだと思います。
私の人生では、なぜクラッシュするのかわかりません。ここに誰かアイデアがありますか?