Для моего проекта мне нужно извлечь типы сообщений из файла журнала. У меня есть файл журнала 700 МБ, который содержит около 4.7 миллионов строк, и мне нужно прочитать каждую строку строки и извлечь поле сообщения. Мне нужно найти размер сообщения в каждой записи (это размер события) и сохранить его вместе с этим сообщением в словаре. Для одного и того же размера события может быть несколько сообщений. Но я получаю исключение OutOfMemoryException, когда использую приведенную ниже логику.Чтение большого файла журнала в C#
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?
Как вы получить доступ к данным? Вам нужно вывести все события с определенным размером и работать над ними на основе этого? – dcaswell
Каждый раз, когда вы добавляете запись, вы добавляете все предыдущие записи в список, это необходимо? – usercr
@ user814064 У меня есть необработанный файл журнала (.log) со мной. Я хочу прочитать его по строкам и сформировать разделы сообщений с одинаковым размером. – Sridhar