私はiTextSharpを使用しており、数十万のRTFドキュメントを生成する必要があります。結果ファイルのサイズは5KBから500KBです。これを高速化する方法はありますか? MemoryStream vs FileStream
私は以下の2つのアプローチをリストアップしています - 元のアプローチは必ずしも遅いとは限りませんでしたが、私が必要とする出力文字列を得るためにファイルへの書き込みと取り出しの理由を考えました。私はMemoryStreamを使ってこの他のアプローチを見ましたが、実際には遅くなりました。基本的に出力されたRTFコンテンツが必要なので、不要な書式をクリーンアップするためにそのRTFでいくつかのフィルタを実行できます。データを戻すクエリーは非常に速く見えます。元のアプローチファイルを使用して1000ファイル(実際には2000個のファイルが作成されます)を生成するには、約15分かかります。同様に、2番目のアプローチでは約25-30分かかります。私が実行したファイルは平均約80KBです。
2番目の方法に問題がありますか?最初のものより速く、遅くないように思えます。
オリジナルのアプローチ:
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ファイルを持っています - 5KBと500KBの間。私はiTextSharpを使用してSQLクエリからRTFコンテンツを生成しています。 – user53885
Memorystreamを再利用します。すなわち、それを一度割り振り、それをその間の内容をクリアするすべてのファイルに使用する。 – CodesInChaos