HtmlAgilityPack中HtmlDocument出现System.OutOfMemoryException异常

3
using (Stream reader = propertyBag.GetResponse())
{
    reader.Seek(0, SeekOrigin.Begin);
    htmlDoc.Load(reader, true);
}

但是,htmlDoc.Load(reader, true);会抛出以下错误:

“mscorlib.dll”中发生未经处理的类型为“System.OutOfMemoryException”的异常

我们有一个每天运行24小时并检查一些html数据的程序。它可以运行几个小时,然后我们就会遇到这个错误。错误总是与HtmlAgilityPack的HtmlDocument相关。

如何防止这种情况发生?


HTML文档有多大?您是否在处理HtmlDocument对象? - Foole
1
当发生这种情况时,内存是否真的增长到不切实际的程度,还是...?(OOM并不总是与内存负载有关) - Marc Gravell
这只是一个猜测,但我认为你可能已经用完了内存。 - Domenic
我正在测试的计算机上有4GB的RAM。@Foole不,我不这么认为。何时使用dispose()? - senzacionale
我搜索了一下,但是无法处理HtmlDocument。在HtmlDocument中不支持Dispose... - senzacionale
切换到x64有所帮助。 - Jet Chopper
1个回答

3
我会使用内存分析器来检查哪些对象没有被释放。也许Agility Pack存在内存泄漏,或者你的代码使用它时存在问题。
我使用过的最好的分析器之一是dotTrace,它允许您在不同时间点拍摄两个快照,比较它们并显示未被释放的对象。

可能不是HtmlDocument实例卡在内存中。而且也不是调用Dispose()方法的情况,而是失去了对某些对象的引用,以便它们可以被GC回收。 - Jakub Konecki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接