У меня есть машина с 32 ГБ памяти/Windows Server 64 бит.Ошибка в ReadLine для огромного файла
Файл около 30G, но постоянно растет, так как это файл журнала.
Я получаю исключение из памяти (на ReadLine), но я не понимаю, почему - поскольку я просто читаю «линию» несколько раз. После этого данные НЕ сохраняются.
Работает ли ReadLine так, как я этого не ожидал? Возможно ли, что это действительно чтение всего файла в памяти? Или это как-то результат попытки повторного чтения последней строки - пока ожидаете, что файл журнала будет расти?
EDIT StackTrace как ошибка:
Исключение типа 'System.OutOfMemoryException' был брошен. в System.Text.StringBuilder.ExpandByABlock (Int32 minBlockCharCount) в System.Text.StringBuilder.Append (значение Char *, Int32 valueCount) в System.Text.StringBuilder.Append (значение Char [], Int32 startIndex, Int32 charCount) на System.IO.StreamReader.ReadLine() в FIXFileReader.FIXFileReader.NextIntraMessage (DateTime & sourceDT) в C: \ Проекты \ OrderManager \ OrderManager \ FIXFileReader.cs: линии 116
private string line;
private StreamReader;
//edit to give better picture
txtFileReader = new StreamReader(File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
while (true)
{
while ((line = txtFileReader.ReadLine()) == null)
{
if (!masterForm.FixFileDataLive)
{
masterForm.FixFileDataLive=true;
}
System.Threading.Thread.Sleep(1);
}
// Do processing of line here
// < other code >>
//
}
Рассмотрите возможность замены определения StreamReader командой «[using] (http://msdn.microsoft.com/en-us//library/yh598w02.aspx)» на C#. Также этот вопрос, вероятно, является дубликатом. См. [1] (https://stackoverflow.com/questions/13415916/read-big-txt-file-out-of-memory-exception) [2] (https://stackoverflow.com/questions/12689284/memory -leak-с-StreamReader). Также прочитайте [this] (http://bytes.com/topic/c-sharp/answers/277723-problem-reading-large-text-file). –
Вместо этого вы пытались использовать File.ReadLines? –
Как долго длится «линия»? Вы видите использование памяти, подтверждающее, что вы действительно используете слишком много памяти? –