Visual Studio探查器,如何跟踪[clr.dll]用法

Bry*_*ner 8 .net profiler visual-studio

在Visual Studio中使用分析器来跟踪昂贵的功能时,我偶尔会看到大多数工作最终都在[clr.dll]中.这基本上相当于一个黑盒子,我想知道是否有办法找出为什么它花了那么多时间在那里.

我假设clr.dll处理诸如JIT编译,加载程序集和管理appdomains,垃圾收集,反射等等之类的东西.但它实际上很难确定哪些代码导致它花费这么多时间.

显然除了运行时本身之外还有一些其他代码会导致它在clr.dll中花费那么多时间,那么如何追踪哪些代码有问题呢?

Mik*_*vey 1

您需要知道代码的哪一部分 - 您可以编辑和编译的代码,这是您唯一可以修复的代码 - 该代码的哪一部分占用了大部分的使用时间。

知道clr.dll占用了大量时间并没有什么好处,除非您能知道代码的哪一部分对此负责。

该信息位于调用堆栈中。

如果您有一个方法,甚至是一行代码,它在堆栈上停留了一定百分比的时间(例如 20%),那么它大约负责该百分比的时间。如果您能以某种方式消除该行代码(或使其花费更少的时间),那么总时间的 20% 将变为零或几乎为零,从而使您的加速系数为 1.0/0.8 = 1.25 或 25%

那么如何找到这样的线呢? 这是我使用的方法。 没有人声称它很漂亮,除非总体结果得到赞赏。如果重复应用,可能会出现较大的加速系数