C#内存使用问题

时间:2011-06-19 13:31:58

标签: c# .net

我有一个方法,它将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;
    }

3 个答案:

答案 0 :(得分:5)

对于100兆字节的.pdf,这是正常的。您将整个内容加载到内存中,因为.NET中的字符占用2个字节,所以占用的内存量增加了一倍。您还将在列表的大对象堆中创建一堆垃圾。添加典型的.NET运行时开销,300兆字节不是意外结果。

检查this answer,详细了解如何使用List&lt;&gt; .Capacity属性有助于降低LOH需求。

答案 1 :(得分:0)

检查您的pdf加载程序是否被引用 - 因此无法处理。

答案 2 :(得分:0)

您的pdf库是否基于COM?完成后,您可能需要在某些引用上调用Marshall.releasecomobject。