单击按钮时,会弹出一个对话框。我在该文件夹中找到所有pdfs并合并它们。
即使合并后,他们都留在记忆中。

有人能帮我解决这个问题吗?我还需要帮助理解Close()在做什么。我的理解是,这将清除它的记忆。
private void button1_Click(object sender, EventArgs e)
{
folderBrowserDialog1 = new FolderBrowserDialog();
DialogResult = folderBrowserDialog1.ShowDialog();
if(DialogResult == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
Environment.SpecialFolder root = folderBrowserDialog1.RootFolder;
}
if(folderBrowserDialog1.SelectedPath != "")
{
IList<string> inputFiles = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
//destination to make merged file
string dest = @"D:\PDF-merge";
string filename = "merged.pdf";
try
{
System.IO.Directory.CreateDirectory(dest);
}
catch { }
//creating merge file
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest + @"\" + filename));
PdfMerger merger = new PdfMerger(pdfDoc);
PdfReader reader;
PdfDocument pdf2merge;
for (int i = 0; i < inputFiles.Count; i++)
{
if (Path.GetExtension(inputFiles[i]) == ".pdf")
{
reader = new PdfReader(inputFiles[i]);
reader.SetUnethicalReading(true);
pdf2merge = new PdfDocument(reader);
merger.Merge(pdf2merge, 1, pdf2merge.GetNumberOfPages());
reader.Close();
pdf2merge.Close();
}
}
merger.Close();
}
}合并第一个文件夹后编辑

合并第二个文件夹后

任务管理器中显示的内存使用情况

发布于 2022-06-13 05:55:32
PdfDocument和PdfReader都实现了IDisposable,因此我总是将它们与using一起使用,以确保在使用它们之后释放所有资源。假设是当前的C#版本,您可以通过以下方法实现这一点
for (int i = 0; i < inputFiles.Count; i++)
{
if (Path.GetExtension(inputFiles[i]) == ".pdf")
{
using var reader = new PdfReader(inputFiles[i]);
reader.SetUnethicalReading(true);
using var pdf2merge = new PdfDocument(reader);
merger.Merge(pdf2merge, 1, pdf2merge.GetNumberOfPages());
reader.Close();
pdf2merge.Close();
}
}(当然,必须删除reader和pdf2merge在for之前的声明。)
同样适用于pdfDoc
using PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest + @"\" + filename));也许是PdfMerger,尽管文档没有100%清楚地说明这一点(如果编译器抱怨PdfMerger没有实现IDisposable,那么它就不会。)
此外,PdfReader.SetUnethicalReading的文档表明,如果您使用此方法,它们将不承担任何责任。你为什么要用它?这可能与你的问题有关吗?
编辑:
对于根本原因分析,您应该考虑投资于内存配置文件,特别是如果代码将来某个时候是生产代码的话。
https://stackoverflow.com/questions/72597949
复制相似问题