C#内存使用问题

Orh*_*nar 2 .net c#

我有一个方法,它将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;
    }
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 5

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

请查看此答案,了解有关如何使用List <>的详细信息.容量属性有助于降低LOH需求.