
我无法预测这些文档的内容,但是一个这样的文档会导致我的应用程序因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问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)