Я работаю с iTextSharp, и мне нужно создать сотни тысяч документов RTF - результирующие файлы находятся между 5 КБ и 500 КБ.Есть ли способ сделать это быстрее? MemoryStream vs FileStream
Я перечисляю 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 - How to generate a RTF document in the ClipBoard instead of a file
Каков объем файла, в котором вы работаете? Если он не очень большой, то нет, это не будет иметь большого значения. Если он большой, вы можете не захотеть обработать его в памяти, если он слишком сильно ухудшает вашу систему. – phillip
Привет благодарю вас за ответ. У меня около 400 000 файлов, которые мне нужны для вывода - от 5 КБ до 500 КБ. Я использую iTextSharp для создания RTF-контента из SQL-запроса. – user53885
Повторное использование Memorystream. то есть выделить его один раз и использовать его для всех файлов, очищающих его содержимое между ними. – CodesInChaos