xml/xslt驱动的asp.net web应用中100%的cpu使用率

xml/xslt驱动的asp.net web应用中100%的cpu使用率,asp.net,xml,xslt,cpu-usage,web-applications,Asp.net,Xml,Xslt,Cpu Usage,Web Applications,web应用程序使用来自web服务的XML,然后使用XSLT将其转换为HTML。该应用程序使用一个HttpModule,使用AddOnPreRequestHandlerExecuteAsync获取XML 使用的类别: XmlDocument—存储xml。 XslCompiledTransform—存储转换,并缓存在应用程序中。 使用BeginGetResponse/EndGetResponse的异步HttpWebRequest 带有挂钩AddOnPreRequestHandlerExecuteAs

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

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

我不想使用XPathDocument,除非没有其他可能的优化。需要一些复杂的代码才能将所有XML汇集在一起,而不需要编写XML文档。还有一些不是来自web服务的附加XML也必须添加到文档中

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

谢谢

更新


经过多次搜索,我发现导致cpu争用的问题实际上是一个无限(或接近)循环,它根本不在我的代码中,并且由于它出现的地方的性质而隐藏在我的分析中。这里的第一课,如果没有意义,请在分解代码之前寻找解决问题的替代推理。

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

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


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

考虑使用Linq到XML进行转换-从转换的角度来看,350 kB是一个大的文本/XML文档-它可能比XSLT转换快。有关示例,请参阅。

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


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

尝试使用探查器。并有试用版。这将使你能够指出你的问题。(dotTrace的优点是,它与单元测试集成。)

有没有可能看到一些代码?您还可以给出xml文档的大小,因为转换大型xml文档可能会消耗大量资源。另外,您是否尝试过优化xlst,也许有一种更快的转换方法。@Obalix的平均xml文档大小为350kb。@Jonathan如果有特定内容需要查看,我可以提供一些代码,这是一个相当大的web应用程序,因此我无法发布所有内容。在我使用完XmlDocument之后,您所说的处理XmlDocument和转换是什么意思?转换会被缓存以供以后使用(它会被反复使用)。不过,我并没有特别在使用后对文档做任何处理,我应该将其设置为null吗?是的,set=null是我所说的“处置”它的意思。也许我已经过时/过时了,但是虽然您可能正在缓存转换后的文档,但您进行转换的对象可以在不再需要时进行处置,不是吗?转换后的文档无法缓存,它们在这一点上是特定于用户的。web服务位于网络内,但不在同一服务器上。但是“…XslCompiledTransform-存储转换,缓存在应用程序中…”xml转换位于同一服务器上,而不是来自web服务,数据xml来自不同的服务器。对不起,有什么困惑