1

Web 应用程序使用来自 Web 服务的 XML,然后使用 XSLT 将其转换为 HTML。该应用使用 HttpModule 通过 AddOnPreRequestHandlerExecuteAsync 获取 XML。

使用的类:XmlDocument - 存储 xml。XslCompiledTransform - 存储转换,缓存在应用程序中。使用 BeginGetResponse/EndGetResponse HttpModule 和挂钩的 AddOnPreRequestHandlerExecuteAsync 事件的异步 HttpWebRequest。

除非没有其他可能的优化,否则我不想使用 XPathDocument。如果无法写入 XmlDocument,则需要一些复杂的代码才能将所有 XML 放在一起。还有一些不是来自 Web 服务的附加 XML,也必须添加到文档中。

任何建议都会很好。服务器似乎没有内存问题,如果这说明了什么,只是 CPU 使用率很高。

谢谢。

更新

经过大量搜索,我发现导致 cpu 争用的问题实际上是一个无限(或接近)循环,它根本不在我的代码中,并且由于它出现的位置的性质而隐藏在我的分析中。这里的教训,如果它没有意义,在撕裂你的代码之前寻找问题的替代推理。

4

4 回答 4

0

尝试使用 Profiler。DotTraceANTS有试用版。这应该使您能够确定您的问题。(dotTrace 的好处在于它与单元测试集成。)

于 2010-02-25T21:53:28.917 回答
0

考虑使用 Linq to XML 进行转换 - 从转换的角度来看,350 kB 是一个大的 text/xml 文档 - 它可能比 XSLT 转换更快。请参阅此处获取示例。

于 2010-02-25T20:59:59.123 回答
0

什么版本的.NET?自从我使用 XML/XSL 做任何事情以来已经有一段时间了,但是 .NET 2.0 在 XslCompiledTransform 中存在一些内存问题。虽然这可能是问题所在,但更有可能是代码中的某些内容。您能否提供一些示例 XML 和 XSL 文档?

如果您将两者都保存为静态文件并尝试运行转换(创建一个小的独立脚本或单元测试来查看是否存在问题),会发生什么?确保在处理完 XslCompiledTransform 对象后立即处理它(以及 XML 文档)。

当我遇到 XSL 转换问题时,我通常会保存一个示例 XML 文档并在Cooktop中应用我的 XSL 。一开始有点难以弄清楚,但这是一个很好的健全性检查,可确保您的 XSL 中没有明显的错误。

于 2010-02-25T20:33:55.110 回答
0

Web 服务是否在同一台服务器上?如果是这样,单独测试服务是否会显示高 CPU 使用率?

您如何将转换后的文档放入缓存中?

于 2010-02-25T21:44:18.327 回答