DataTable.WriteXML会导致高CPU使用率吗?

时间:2013-09-18 09:26:26

标签: vb.net web-services string-concatenation processing-efficiency

我有一个Web服务,间歇性地在服务器上使用高达100%的CPU。我们无法在开发服务器上复制它,它似乎只在生产中发生。我们认为这可能是一个负载问题,但我们一直在测试它,最多可以有10个人。在生产中,只有2人使用它,处于beta状态。我已经搜索了任何无限循环的代码,但没有。

经过大量的搜索后,我发现this页面表明字符串连接可能是个问题。有5个地方使用StringWriter,我已将其更改为StringBuilder,如链接所示。但问题仍然存在,我想知道它是否可能是DataTable.WriteXML电话。基本上,Web服务中的每个方法都填充数据表并将数据作为XML返回,因为这是第三方所需的格式。这些电话都是:

Dim SB As New StringBuilder
Dim SW As New IO.StringWriter(SB)
dsSource.Tables("Test").WriteXml(SW, Data.XmlWriteMode.IgnoreSchema, True)

这效率低吗?这会导致100%的CPU使用率吗?如果它可能是原因,那么最好的替代方案是什么?

我很乐意对此进行一些监控,但事实是它可能每周发生一次,它只发生在实时服务器上,所以如果我花时间运行一些性能诊断,那么现在是时候了服务没有运行,我们的用户无法完成他们的工作。杀死进程并重新生成它会更快更简单。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此生产Web服务器是否只有1个CPU?我问,因为WriteXML与任何同步/单线程代码一样,将使用100%的单个CPU。如果服务器有多个CPU,并且它跳到100并在那里停留一段时间,这可能是其他的。看看像多线程(运行太多)或自己清理后的东西,IE;

SW.flush
SW.Close
SW = Nothing

或将其放入USING块

USING SW As New IO.StringWriter(SB)
'Your code here
END USING