テキストファイルを読み込んで.Netデータテーブルにデータを読み込むコードがあります。コードは、100,000行のデータを持つ小さなサイズのテキストファイルを読み込むと正常に動作します。 (下記のスニペットを参照してください)200MBのような大きなテキストファイルを読み込もうとすると、3.6百万行のデータがSystem.OutofMemoryExceptionをスローします。大きなデータを特定のチャンクに効率的に読み込む方法を尋ねたいと思います。C#を使用して大きなテキストファイルを読み取っているときにSystem.OutofMemoryExceptionが発生しました
using (var stream = File.Open(filePath, FileMode.Open))
{
var content = new StreamContent(stream);
var fileStream = content.ReadAsStreamAsync().Result;
if (fileStream == null) throw new ArgumentException(Constants.FileEmptyErrorMessage);
using (var bs = new BufferedStream(fileStream))
{
using (var reader = new StreamReader(bs, Encoding.GetEncoding(Constants.IsoEncoding)))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (!String.IsNullOrEmpty(line))
{
string[] rows = line.Trim().Split(new char[] { ';' }, StringSplitOptions.None);
DataRow dr = Table.NewRow();
dr[Constants.Percepcion] = rows[0];
dr[Constants.StartDate] = DateTime.ParseExact(rows[2].ToString(), "ddMMyyyy",
CultureInfo.InvariantCulture);
dr[Constants.EndDate] = DateTime.ParseExact(rows[3].ToString(), "ddMMyyyy",
CultureInfo.InvariantCulture);
dr[Constants.CID] = rows[4];
dr[Constants.Rate] = rows[8];
Table.Rows.Add(dr);
}
}
}
}
}
行を追加した後で 'テーブル'を使って何をしますか? –
BufferedStreamに別のコンストラクタを使用してバッファサイズを修正できます。 '新しいBufferedStream(ファイルストリーム、1024)'。 – ManoDestra
[.NETで大きな(1 GB)txtファイルを読み取る方法?](http://stackoverflow.com/questions/4273699/how-to-read-a-large-1-gb-txt-ファイル内で) – bluetoothfx