Ich schreibe ein kleines Werkzeug für mich, um PDF-Dateien mit PDFSharp-Bibliothek zusammenzuführen. Ich verwende die neueste Vorabversion (1.5) von PDFSharp.PDFSharp keine Ressourcen (Speicherleck)
Ich stoße auf ein Problem, bei dem Dokumente, die in den Arbeitsspeicher geladen werden, nicht freigegeben werden, wenn sie den Gültigkeitsbereich verlassen. Ich verfolgte diesen Speicherverlust des Codes auf den folgenden Teil nach unten:
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);
}
Ein Beispiel wäre ich 10 PDF-Dokumente haben, die auf 178 Mb beträgt. Das zusammengeführte Dokument, das erstellt wird, ist auch etwa 178 Mb. Wenn der obige Code beendet wird, wird die Speicherbelegung bei 356 Mb gehalten. Wenn ich mehr Dokumente zusammenführe, steigt dieses Speicherleck und verursacht schließlich einen Absturz.
Ich habe versucht, mit Anweisungen zu entfernen und mit Dispose(), wenn ich das Dokument aus dem Speicher freigegeben werden wollte, aber es funktioniert nicht so gut.
Jede Hilfe wäre willkommen. Vielen Dank.
Edit:
Um genauer zu sein:
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 ist eine Liste, die eine Reihe von Dateipfaden zu den ausgewählten PDF-Dateien enthält.
Bitte geben Sie eine MCVE: http://stackoverflow.com/help/mcve –
Haben Sie LOH Verdichtung versucht? https://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.largeobjectheapcompactionmode(v=vs.110).aspx –
Haben Sie Ihre App profiliert, um zu sehen, was verhindert, dass der Speicher freigegeben wird? –