2010-02-25 68 views
1

的网络应用程序使用XML来自web服务,然后将其转化使用XSLT HTML。该应用程序使用HttpModule使用AddOnPreRequestHandlerExecuteAsync获取XML。使用类: XmlDocument - 存储xml。 XslCompiledTransform - 存储转换,缓存在Application中。 使用BeginGetResponse的异步HttpWebRequest/EndGetResponse HttpModule挂钩了AddOnPreRequestHandlerExecuteAsync事件。100%的CPU使用率在XML/XSLT从动asp.net web应用程序

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

任何建议将是不错的。服务器似乎没有内存问题,如果这是关于任何事情的信息,只是非常高的CPU使用率。

谢谢。

UPDATE

经过一番搜索,我发现使CPU种族问题实际上是一个无限(或附近)的循环,这是不是在我的代码在所有,从我的分析隐因即将出现的地方。这里的教训,如果没有意义,在撕开你的代码之前寻找替代的问题推理。

+2

任何看到一些代码的机会呢? – Jonathan 2010-02-25 20:31:20

+0

您是否也可以提供xml文档的大小,因为大型XML文档的转换可能非常耗费资源。另外,你是否试图优化你的xlst,也许有一个更快捷的方式来完成转换。 – AxelEckenberger 2010-02-25 20:34:11

+0

@Obalix平均xml文件大小为350kb。 – aepheus 2010-02-25 20:37:58

回答

0

什么版本的.NET?我已经用XML/XSL完成了一些任务,但.NET 2.0在XslCompiledTransform中存在一些内存问题。虽然这可能是问题,但它更可能是代码中的某些内容。你能提供一些示例XML和XSL文档吗?

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

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

+0

在完成使用后,处置XmlDocument和Transform是什么意思?转换被缓存供以后使用(它一遍又一遍地使用)。虽然我没有专门对文档做任何事情,但我应该将它设置为null? – aepheus 2010-02-25 20:47:22

+0

是的,set = null就是我的意思,就是处置它。也许我已经过时/不习惯,但是当你可能正在缓存已转换的文档时,一旦不再需要它,转换的对象可以被丢弃,不是吗? – Tom 2010-02-25 21:08:03

0

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

0

是在同一台服务器上的Web服务?如果是这样,服务本身是否显示高CPU使用率?

你是如何把转换后的文档到缓存?

+0

转换后的文档不能被缓存,它们是用户特定的那一点。 Web服务位于网络中,但不在同一台服务器上。 – aepheus 2010-02-25 22:35:53

+0

但是“... XslCompiledTransform - 存储转换,在应用程序中缓存...” – Jonathan 2010-02-25 22:47:13

+0

xml转换位于同一台服务器上,不是来自Web服务,而是来自不同服务器的数据xml。对不起,有任何困惑 – aepheus 2010-02-25 23:23:08

0

尝试用户探查。 DotTraceANTS有试用版。这应该使你能够指出你的问题。 (约dotTrace的好处是,它与单元测试集成。)