解决 StackOverflowException

2024-02-02

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

我无法预测这些文件的内容,但是其中一份文件导致我的申请失败并出现以下错误:StackOverflowException。该文档包含以下 HTML:

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

大约有10,000个<li>像这样嵌套的元素。由于 HtmlAgilityPack 解析 HTML 的方式,它会导致StackOverflowException.

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

我确实想知道为线程堆栈设置更大的大小,但是设置更大的堆栈大小是一种黑客行为:它会导致我的程序使用更多的内存(我的程序启动大约 50 个线程来处理 HTML,所以所有这些线程堆栈大小会增加),如果再次遇到类似情况,则需要手动调整。

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


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

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

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

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

实际的修复是...添加了 HtmlDocument.OptionMaxNestedChildNodes,可以设置它来防止由大量嵌套标签引起的 StackOverflowExceptions。它将抛出一个 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决 StackOverflowException 的相关文章

随机推荐

  • WordPress webp 图像预览

    我已经使用以下代码更新了 wordpress 以允许 webp 上传 function webp upload mimes existing mimes existing mimes webp image webp return exist
  • 测试期间随机抛出“InvalidCastException”

    在 WatiN UI 测试中 我遇到一个问题 在运行测试时 错误有时会抛出以下错误 InvalidCastException 未由用户代码处理 无法将类型为 mshtml HTMLDocumentClass 的 COM 对象转换为接口类型
  • 在Java Servlet中读取Ajax发送的JQuery数据

    这是我的 Ajax 代码 var myJSONObject bindings ircEvent PRIVMSG method newURI regex http ajax url ships data myJSONObject succes
  • 如何在 Visual Studio 2012 中加载符号

    当我调试我的应用程序时 我看到消息 找不到或打开 PDB 文件 我似乎记得能够在调试应用程序时指定 PDB 文件的位置 我怎样才能做到这一点 我正在使用 Visual Studio 2012 添加符号位置 打开设置 工具 gt 选项 gt
  • 如何修复拥挤的 tmap 图例中的垂直空间 [R]

    如何修复 tmap 图例中的垂直空间问题 如链接的基本 R 示例中所示的问题 图例中的垂直空间 https stackoverflow com questions 38332355 vertical spaces in legend y i
  • 从下拉框中获取文本

    这将获取我的下拉菜单中选择的任何值 document getElementById newSkill value 然而 我无法找出下拉菜单当前显示的文本要查找的属性 我尝试了 文本 然后查看了W3学校 http w3schools com
  • 如何在 Python 中处理 YAML 流

    我有一个命令行应用程序 它以以下形式连续输出 YAML 数据 col0 datum0 col1 datum1 col2 datum2 col0 datum0 col1 datum1 col2 datum2 它永远这样做 我想编写一个Pyth
  • 在 Symfony 中激活 StringLoader Twig 扩展

    我正在尝试激活Twig StringLoader 扩展 http twig sensiolabs org doc functions template from string html在 Symfony 2 3 项目中 但无法获得正确的 y
  • 如何在reactjs中上传到Firebase存储之前调整图像大小

    我正在尝试调整用户上传的图像大小 以提高我的网站效率并限制我的存储使用量 我从包中创建了一个名为 resizeFile 的函数 react image file resizer 现在我正在努力解决的是在上传到 firebase 存储之前如何
  • 模式匹配在 bash 脚本中不起作用

    使用模式匹配 file1 不能在 bash 脚本中工作 但可以在命令行中工作 例如 ls file1 file2 这将列出目录中的所有文件 除了file1 and file2 当在脚本中执行该行时 会显示此错误 script sh line
  • 如何查询一个域的用户是否是另一个 AD 域中的组的成员?

    我有一系列应用程序 它们都使用我创建的相同的 C Net 2 0 代码来检查用户是否是 Active Directory 组的成员 直到最近 当我将来自另一个受信任的 AD 域的用户添加到我的 AD 组之一时 我的代码才出现任何问题 我的问
  • 更改选择框选项背景颜色

    我有一个选择框 当单击选择框并显示所有选项时 我试图更改选项的背景颜色 body background url http subtlepatterns com patterns black linen v2 png repeat selec
  • 从 mongodb id 获取时间戳

    如何从 MongoDB id 获取时间戳 时间戳包含在 mongoDB id 的前 4 个字节中 请参阅 http www mongodb org display DOCS Object IDs http www mongodb org d
  • Objective-C 中 .Net Unicode 编码的等价物是什么?

    Objective C 中 Net 的等价物是什么System Text Encoding Unicode 我努力了 NSUnicode字符串编码 NSUTF8字符串编码 NSUTF16字符串编码 以上都没有正确地将文本转换回来 根据htt
  • 提取序列(列表) Prolog

    给定一个列表 例如 1 2 3 7 2 5 8 9 3 4 我如何提取列表中的序列 序列被定义为有序列表 通常我会说 n 元组 但在序言中我被告知元组被称为序列 因此 我们希望在下一个元素小于前一个元素的位置处剪切列表 所以对于清单 1 2
  • 如何修复“不明确”的函数调用?

    我正在开发一个 C 类程序 我的编译器抱怨 不明确 的函数调用 我怀疑这是因为有几个函数定义了不同的参数 我如何告诉编译器我想要哪一个 除了特定情况的修复之外 是否有通用规则 例如类型转换 可以解决此类问题 Edit 就我而言 我尝试打电话
  • 如果存在警报,WebDriver 屏幕截图将不起作用。使用c#.net如何处理?

    我正在使用 ASP net C net 内联网应用程序 Selenium Webdriver 用于测试应用程序 一页输入相同的名称 显示警报消息 已存在 使用 ajax 的服务器端警报 我想用 screenshort 捕获该警报消息 Sel
  • 为什么在删除元素/属性之前要检查它?

    In the 使用属性节点中的章节学习 Javascript 现代 Javascript 基础知识实践指南 http learningjsbook com 作者 Tim Wright 在第 73 页说道 删除属性就像获取属性一样简单 我们只
  • 约束 Qhull 生成的 Voronoi 顶点的域

    简而言之 我的问题是 是否可以约束 Qhull 生成的 Voronoi 顶点的域 如果是的话 怎样才能做到这一点呢 我的上下文问题 我正在研究数据可视化 其中我在 2D 字段中有点 这些点有一点重叠 所以我稍微 抖动 它们 以使它们不重叠
  • 解决 StackOverflowException

    我正在使用 HtmlAgilityPack 解析大约 200 000 个 HTML 文档 我无法预测这些文件的内容 但是其中一份文件导致我的申请失败并出现以下错误 StackOverflowException 该文档包含以下 HTML ol