是否有任何.NET性能分析工具可以附加到正在运行的Windows服务并进行基本堆栈调用采样?如果该工具不需要安装,那将是非常好的,因为我需要通过客户的IT部门获取大量繁文tape节。.NET生产代码性能分析工具
谢谢
自然的性能问题: 这个程序有性能问题运行作为Windows服务,并处理来自200多个移动设备的收入信息。通常这个程序每秒可以处理至少10条消息。不幸的是,在最近的升级之后,由于某些原因,该程序通常在上午7点左右不能够快速处理消息。消息进入后,它可以在程序内部队列中超过10分钟,然后才能进行处理。我们还注意到该程序使用的CPU比正常高。通常情况下,它应该是8核心机器的5%,现在是20-25%。
该程序不仅处理传入消息,还维护数据库并向客户端提供数据。它有五个线程处理传入的消息,并在其线程上运行任何维护作业。
当前的解决方法是在发生减速时重新启动服务。重新启动后,程序将再次正常运行(CPU低于5%)。直到凌晨7点左右,第二天早上才会发生。每次重新启动后,队列中的所有消息均被丢弃。通常上午7点和下午5点是我们收到大量信息的时间,但问题似乎只发生在上午7点。
我们的团队试图在内部使用模拟消息重现该程序,并进行代码比较以查看是否存在任何关键瓶颈。
听起来像问题可能与内存泄漏有关(可能是一个事件句柄未释放,导致对象永远无法被垃圾收集)。我会建议在内部运行诸如DebugDiag之类的测试消息,并查看是否存在某种性质的泄漏。你可以检查[这个链接](http://viisual.net/tools/)下载1.2测试版,它有一个专门针对.Net内存使用情况的规则。抛出你的PDB文件,你可以得到分配的行号。 – pstrjds 2011-04-11 04:51:44
感谢您的建议。应用程序可能会在一段时间内积累某些内容,并且不会丢弃数据,因为我们注意到应用程序启动后内存更高。但是,它并不直接解释高于正常的CPU使用率。 – dsum 2011-04-11 20:40:56
不知道你的代码的性质我不能肯定地说,但是如果由于内存压力它必须进行大量分页,或者你正在迭代代码中的某种集合,那么CPU使用率可能会增加,预计会不断增长,但现在每当数据进入时你都被迫迭代更大的集合......这肯定会导致CPU时间随着时间的推移而增长。 – pstrjds 2011-04-12 15:38:44