2015-02-06 90 views
2

我在Windows 8.1 x64上使用C#.NET 4.0应用程序需要很长时间(18秒)来执行某些操作。我想尝试诊断为什么会发生这种情况。过程监视器跟踪显示:当程序响应缓慢时,该程序在做什么?

╔═══════════════╦════════════════════════════════════════╗ 
║ Relative Time ║    Operation    ║ 
╠═══════════════╬════════════════════════════════════════╣ 
║ 00:02.000000 ║ Thread Create       ║ 
║ 00:02.000100 ║ Thread Create       ║ 
║ 00:04.000000 ║ Thread Create       ║ 
║ 00:04.000100 ║ Thread Create       ║ 
║ 00:04.000200 ║ Thread Create       ║ 
║ 00:04.000300 ║ Thread Exit       ║ 
║ 00:04.000400 ║ Thread Create       ║ 
║ 00:04.000500 ║ TCP Disconnect       ║ 
║ 00:04.000600 ║ Thread Exit       ║ 
║ 00:06.000000 ║ Thread Create       ║ 
║ 00:06.000100 ║ Thread Create       ║ 
║ 00:06.000200 ║ Thread Create       ║ 
║ 00:06.000300 ║ Thread Create       ║ 
║ 00:06.000400 ║ Thread Create       ║ 
║ 00:07.000000 ║ Thread Exit       ║ 
║ 00:10.000000 ║ Thread Create       ║ 
║ 00:11.500000 ║ CreateFile        ║ 
║    ║ // read the file contents    ║ 
║ 00:11.540000 ║ CloseFile        ║ 
║ 00:11.541000 ║ CreateFile        ║ 
║    ║ // read the file contents    ║ 
║ 00:11.600000 ║ CloseFile        ║ 
║ 00:12.100000 ║ Thread Exit       ║ 
║ 00:19.000000 ║ Thread Exit       ║ 
║ 00:20.000000 ║ Thread Exit       ║ 
║    ║ // from here on things respond quickly ║ 
╚═══════════════╩════════════════════════════════════════╝ 

有几个大的差距,我想更好地了解该程序正在做什么。假设我可以得到符号(但可能不是源),有什么我可以做的,以更好地了解发生了什么?我愿意使用WinDbg或Windows性能监视器。我只想从哪些工具开始,找到一些方向来缩小这些差距。

+0

Visual Studio 2015在整个应用程序生命周期中都有一些非常棒的性能工具。它也在您调试时会告诉您线到线的执行速度。现在CTP是免费下载的。 – Greg 2015-02-06 17:44:48

回答

7

更好的选择是简单地通过分析器运行你的程序。 Visual Studio有一个很好的例子,它在“分析”菜单下(至少在VS 2012中)。

使用探查器可以准确地显示您的所有代码占用了多少代码,直至各个方法调用。使用您拥有的信息/工具,获取这些信息将非常困难。

+0

另外,Stack Exchange的MiniProfiler是一个很棒的工具。 – 2015-02-06 17:44:49

+0

OP写道:_Assuming我可以得到的符号(但可能不是来源)_。分析仪仍能帮忙吗? – TaW 2015-02-06 19:04:50

+0

@TaW我没有那样运行它,但是你*可以*将profiler附加到正在运行的实例,并且如果那里有一个pdb文件,它可能会给你提供有用的数据。 – BradleyDotNET 2015-02-06 19:08:27