私のプロジェクトでは、ログ ファイルからメッセージ タイプを抽出する必要があります。約 470 万行を含む 700 MB のログ ファイルがあり、各エントリを 1 行ずつ読み取り、メッセージ フィールドを抽出する必要があります。各エントリのメッセージのサイズ (イベント サイズ) を見つけて、そのメッセージと共に辞書に格納する必要があります。同じイベント サイズに対して複数のメッセージが存在する場合があります。しかし、以下のロジックを使用すると OutOfMemoryException が発生します。
Dictionary<Int32,List<String>> dt=new Dictionary<Int32,List<String>>();
List<String> entries=new List<String>();
StreamReader sr=new StreamReader("Bluegene.log");
String s;
while((s=sr.readLine())!=null)
{
eventsize=s.length - 9; //size of only the message field
entries.Add(s);
if (!dt.ContainsKey(eventsize))
{
dt.Add(eventsize, entries);
}
else
{
dt.Remove(eventsize);
dt.Add(eventsize, entries);
}
}
MemoryMappedFile を使用すると役立ちますか?