我正在使用iTextSharp,並需要生成數十萬個RTF文檔 - 生成的文件在5KB到500KB之間。有沒有辦法讓這個更快? MemoryStream vs FileStream
我在下面列出2種方法 - 原始方法不一定慢,但我想明白爲什麼要寫/從/從文件獲取我需要的輸出字符串。我看到了另一種使用MemoryStream的方法,但它實際上減慢了速度。我基本上只需要輸出的RTF內容,以便我可以在該RTF上運行一些過濾器來清理不必要的格式。帶回數據的查詢非常迅速。要使用原始方法文件生成1000個文件(實際上是創建2000個文件)需要大約15分鐘,與第二種方法相同需要大約25-30分鐘。我運行的結果文件平均大約80KB。
第二種方法有什麼問題嗎?似乎它應該比第一個更快,而不是更慢。
原始的方法:
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 2010-12-11 22:52:07
你好,感謝你的回覆。我需要輸出約400,000個文件 - 介於5KB和500KB之間。我正在使用iTextSharp從SQL查詢生成RTF內容。 – user53885 2010-12-11 22:53:59
重新使用MemoryStream。即分配一次,並將其用於清除其中的內容的所有文件。 – CodesInChaos 2010-12-12 10:08:01