我有一个方法,它将pdf文本转换为列表。在此过程之后,内存使用量增加太多。例如1000页pdf使用300mb内存,我无法释放它。我已经阅读了一些LOH文章,但没有找到解决方案。
public List<string> GetTextFromPdf()
{
if (_pdfDoc.Pages == null) return null;
List<string> ocrList = new List<string>();
foreach (var words in _pdfDoc.Pages.Select(s => s.Value.WordList))
{
ocrList.AddRange(words.Select(word => word.Word).Select(input => Regex.Replace(input, @"[\W]", "")));
}
GC.Collect();
return ocrList;
}
答案 0 :(得分:5)
对于100兆字节的.pdf,这是正常的。您将整个内容加载到内存中,因为.NET中的字符占用2个字节,所以占用的内存量增加了一倍。您还将在列表的大对象堆中创建一堆垃圾。添加典型的.NET运行时开销,300兆字节不是意外结果。
检查this answer,详细了解如何使用List&lt;&gt; .Capacity属性有助于降低LOH需求。
答案 1 :(得分:0)
检查您的pdf加载程序是否被引用 - 因此无法处理。
答案 2 :(得分:0)
您的pdf库是否基于COM?完成后,您可能需要在某些引用上调用Marshall.releasecomobject。