c#:运行时代码分析 - 任何现有的库?

时间:2010-11-12 09:03:40

标签: c# performance profiling runtime

我有一个应用程序,用户可以将节点连接在一起以执行实时计算。 我希望能够向用户显示CPU使用百分比,以显示正在使用的可用CPU时间量,以及每个节点的故障,以便能够发现问题区域。

这样的运行时分析器是否有任何可用的开源实现? 我可以使用System.Diagnostics.Process.TotalProcessorTime,stopwatches / performancecounters自己编写,但我宁愿选择一些经过尝试的东西。经过测试,如果可能的话,可以在以后提供更详细的信息。

编辑: 我不是在寻找一个独立的分析器,因为我想在我的应用程序的UI中显示实时统计数据。

2 个答案:

答案 0 :(得分:1)

您可以尝试具有此功能的商业GlowCode个人资料工具。

或开源SlimTune,但仍处于测试阶段。

答案 1 :(得分:0)

我假设您正在运行一个计时器,比如说每秒10次计算,因为否则您只是使用100%的CPU(除非您也在进行I / O)。

你能设置闹钟中断以合理的频率启动,如10或100 Hz,与程序正在做的其他任何事情无关,甚至特别是在I / O或其他阻塞时间内?

然后对于每个块,只记录它最后100次中断活动的次数。这是你的百分比,获得它的成本很低。

块是否作为子程序相互调用?在这种情况下,在每个中断上,您可能希望捕获块中的调用堆栈,如果块位于堆栈的某个位置,则块处于“活动”状态,如果它位于堆栈的末尾,则它将“处理”(不在调用另一个块的过程中,而不是在I / O中。然后你可以选择每个块表示它“嘎吱嘎吱”的时间百分比(当累加块时不会超过100%)或“活动”(当累加块时可能超过100%)。

后一个数字的值是它没有告诉你“花费时间”的地方,它告诉你“为什么”。这可以回答诸如“我看到 foo 花费大量时间的问题,但我是如何得到那里的?” I / O也是如此。这也是一个过程,它只发生在其他硬件上。你不想忽略它,因为如果你这样做,你最终可能会说“我怎么只使用一小部分CPU?持有的是什么?”