Я работаю с iTextSharp, и мне нужно сгенерировать сотни тысяч документов RTF - итоговые файлы имеют размер от 5 КБ до 500 КБ.
Я перечисляю 2 подхода ниже - исходный подход не обязательно был медленным, но я решил, зачем писать и извлекать в / из файл, чтобы получить нужную мне строку вывода. Я видел этот другой подход с использованием MemoryStream, но на самом деле это замедлило процесс. По сути, мне просто нужно выводить содержимое RTF, чтобы я мог запустить несколько фильтров на этом RTF для очистки ненужного форматирования. Запросы, возвращающие данные, выглядят очень быстро. Для создания 1000 файлов (фактически 2000 файлов создаются в процессе) с исходными файлами подхода требуется около 15 минут, то же самое со вторым подходом занимает около 25-30 минут. Полученные файлы в среднем занимают около 80 КБ.
Что-то не так со вторым подходом? Похоже, он должен быть быстрее первого, а не медленнее.
Оригинальный подход:
RtfWriter2.GetInstance(doc, new FileStream(RTFFilePathName, FileMode.Create));
doc.Open();
//Add Tables and stuff here
doc.Close(); //It saves a file here to (RTFPathFileName)
StreamReader srRTF = new StreamReader(RTFFilePathName);
string rtfText = srRTF.ReadToEnd();
srRTF.Close();
//Do additional things with rtfText before writing to my final file
Новый подход, пытающийся ускорить его, но на самом деле это вдвое быстрее:
MemoryStream stream = new MemoryStream();
RtfWriter2.GetInstance(doc, stream);
doc.Open();
//Add Tables and stuff here
doc.Close();
string rtfText =
ASCIIEncoding.ASCII.GetString(stream.GetBuffer());
stream.Close();
//Do additional things with rtfText before writing to my final file
Второй подход, который я пытаюсь найти, я нашел здесь:
iTextSharp - Как сгенерировать RTF-документ в ClipBoard вместо файла