gpt4 book ai didi

html-agility-pack - 解决StackOverflowException

转载 作者:行者123 更新时间:2023-12-04 18:11:37 29 4
gpt4 key购买 nike

我正在使用HtmlAgilityPack来解析大约200,000个HTML文档。

我无法预测这些文档的内容,但是其中一个这样的文档导致我的应用程序失败,并显示StackOverflowException。该文档包含以下HTML:

<ol>
<li><li><li><li><li><li>...
</ol>

大约嵌套了10,000个 <li>元素。由于HtmlAgilityPack解析HTML的方式,导致 StackOverflowException

不幸的是,.NET 2.0及更高版本中无法捕获StackOverflowException。

我确实想知道如何为线程的堆栈设置更大的大小,但是设置更大的堆栈大小是很容易的事:这将导致我的程序使用更多的内存(我的程序启动了大约50个线程来处理HTML,因此所有这些线程将会增加堆栈大小),并且如果再次遇到类似情况,则需要手动进行调整。

我可以采用其他解决方法吗?

最佳答案

我刚刚修复了一个错误,我认为与您的描述相同。已将修补程序上传到hap项目站点...

http://www.codeplex.com/site/users/view/sjdirect(请参阅2012年3月8日的补丁程序)

或在此处查看有关该问题和结果的更多文档。

https://code.google.com/p/abot/issues/detail?id=77

实际的解决方法是...
添加了HtmlDocument.OptionMaxNestedChildNodes,可以将其设置为防止由大量嵌套标签引起的StackOverflowException。它将引发ApplicationException消息:“文档具有多个X嵌套标签。这很可能是由于页面未正确关闭标签。”

我如何在补丁后使用Hap ...

HtmlDocument hapDoc = new HtmlDocument();
hapDoc.OptionMaxNestedChildNodes = 5000;//This is what was added
string rawContent = GETTHECONTENTHERE
try
{
hapDoc.LoadHtml(RawContent);
}
catch (Exception e)
{
//Instead of a stackoverflow exception you should end up here now
hapDoc.LoadHtml("");
_logger.Error(e);
}

关于html-agility-pack - 解决StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666282/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com