У меня есть код для синтаксического анализа текстового файла после выполнения переформатирования.Реформат и разбор огромного текстового файла в C#
foreach (string file in Directory.EnumerateFiles(folderPath, "*.*"))
{
contents = contents + File.ReadAllText(file).Replace(">", ">").Replace("<", "<").Replace(""", "'");
pos = contents.LastIndexOf("</event>");
contents = contents.Substring(0, pos + 8);
}
contents = "<?xml version=\"1.0\" encoding=\"utf-8\"?><root>" + contents + "</root>";
XDocument doc = new XDocument();
doc = XDocument.Parse(contents);
Файл содержит теги XML, но не отформатирован должным образом. Следовательно, я переформатирую и сохраняю в строковой переменной contents
. Эта строка загружается в объект XDocument
, и программа работает плавно для небольших файлов (7-10 МБ).
Теперь есть файлы, которые более 100MB в размерах и разрывы кода с из памяти exception.My разрывов кода на
contents = contents + File.ReadAllText(file).Replace(">", ">").Replace("<", "<").Replace(""", "'");
Какие альтернативы у меня есть, чтобы сделать ту же операцию с эффективным файлом обработки.
Один из них становится любопытным - если файл имеет размер более 100 МБ, действительно ли он * действительно * должен быть общедоступным для чтения? –
В вашем текущем коде каждый 'Replace' вызывает другое распределение строк в уже огромной строке в памяти. Не удивительно, что у вас закончилась нехватка памяти. Используйте потоки ('StreamReader') и обрабатывайте куски. – Alex