私はPDFSharpライブラリを使用してPDFファイルをマージするための小さなツールを自分で作成しています。私はPDFSharpの最新のプレリリース版(1.5)を使用しています。PDFSharpはリソース(メモリリーク)を処理しない
私は、メモリにロードされたドキュメントがスコープ外に出ても解放されないという問題に直面します。このメモリリークをコードの次の部分に追跡しました。
using (var mergedDocument = new PdfDocument())
{
for (var i = 0; i < SelectedDocuments.Count; i++)
{
using (var document = PdfReader.Open(SelectedDocuments[i].FilePath, PdfDocumentOpenMode.Import))
{
for (var j = 0; j < document.PageCount; j++)
{
mergedDocument.AddPage(document.Pages[j]);
}
}
}
mergedDocument.Save(savePath);
}
たとえば、私は178Mbで合計10のpdfドキュメントを持っています。作成されたマージされたドキュメントも約178 Mbです。上記のコードの実行が終了すると、メモリ使用量は356 Mbになります。より多くのドキュメントをマージすると、このメモリリークは上昇し続け、最終的にはクラッシュを引き起こします。
メモリからドキュメントを解放したい場合、Dispose()を使用して削除してみましたが、うまくいきませんでした。
ご協力いただければ幸いです。ありがとうございました。
編集:
より正確には:
var parentDirectory = Directory.GetParent(SelectedDocuments[0].FilePath);
var savePath = parentDirectory + "\\MergedDocument.pdf";
using (var mergedDocument = new PdfDocument())
{
for (var i = 0; i < SelectedDocuments.Count; i++)
{
using (var document = PdfReader.Open(SelectedDocuments[i].FilePath, PdfDocumentOpenMode.Import))
{
for (var j = 0; j < document.PageCount; j++)
{
mergedDocument.AddPage(document.Pages[j]);
}
}
}
mergedDocument.Save(savePath);
}
SelectedDocuments選択したPDFファイルへのファイルパスの束を保持しているリストです。
MCVEを入力してください:http://stackoverflow.com/help/mcve –
あなたはLOHの圧縮を試みたことがありますか? https://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.largeobjectheapcompactionmode(v=vs.110).aspx –
あなたのアプリをプロファイリングして、メモリが解放されていることを確認しましたか? –