html-agility-pack – 解决StackOverflowException问题

html-agility-pack – 解决StackOverflowException问题,第1张

概述我正在使用 HtmlAgilityPack来解析大约200,000个HTML文档. 我无法预测这些文档的内容,但是一个这样的文档会导致我的应用程序因StackOverflowException而失败.该文档包含此HTML: <ol> <li><li><li><li><li><li>...</ol> 大约有10,000个< li>.像那样嵌套的元素.由于HtmlAgilityPack解析H 我正在使用 @L_502_0@AgilityPack来解析大约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,可以设置它们以防止由大量嵌套标记引起的StackOverflowExceptions.它将抛出一个ApplicationException,消息“document包含多个X嵌套标记.这可能是由于页面没有正确关闭标记.”

我如何在补丁后使用Hap …

HTMLdocument hapDoc = new HTMLdocument();hapDoc.OptionMaxnestedChildNodes = 5000;//This is what was addedstring rawContent = GETTHECONTENTHEREtry{    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问题全部内容,希望文章能够帮你解决html-agility-pack – 解决StackOverflowException问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1080059.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存