Search
Write a publication
Pull to refresh
0
0
Send message
В этой задаче две проблемы, связанные с чрезмерным потреблением памяти.
1. Чтение исходного файла
2. Запись результата
Что касается второй проблемы, то у вас уже в определении интерфейса IConvertable (а именно метода string Convert(Stream stream)) заложена невозможность работы с большими файлами. Разумнее возращать Stream и не пользоваться StringBuilder`ом, а писать напрямую в поток. Также данная проблема проявится не только при работе с большими файлами, но а еще и с большим количеством средних по размеру. Результат работы будет возвращен в виде большой строки, а отсюда все проблемы с LOH. Другими словами при парсинге большого количества сравнительно небольших файлов (>4KB тескта в нем), память будет стремительно утекать.
Что касается 1го пункта, то тут я с вами не соглашусь. OpenXml умеет работать с большими файлами без чрезмерного потребления памяти (как с xslx, так и c docx):
OpenXmlReader reader = OpenXmlReader.Create(doc.MainDocumentPart);
while (reader.Read())
{
if (reader.ElementType == typeof(Document))
{
}
}
Да сложнее с таким подходом работать, но зато не жрет память.
Судя по методу string Convert(Stream stream) как минимум результат будет в памяти.

Information

Rating
Does not participate
Registered
Activity