似乎没有免费的* .NET 性能分析器可以逐行进行分析。因此,我正在考虑使用秒表进行分析。
*免费即自由,即许可证包括商业应用程序。
编辑:为了回应那些告诉我“购买分析器”的人,我愿意,但如果我能花那么多钱,我会把它花在其他东西上。我试图让我的老板相信分析器是值得的,但运气不佳。这个问题主要是出于好奇。我永远不会认为秒表可以替代真正的分析器。
我有一个小测试应用程序(用 C# 编写),用于测量在每行基础上使用秒表时的性能差异。测试代码是这样的:
int n = 100;
BigInteger f = 1;
for (int i = n; i > 1; i--)
{
f *= i;
}
这是完整的代码:http://pastebin.com/AvbQmT32 http://pastebin.com/AvbQmT32
我为每行代码都有一个秒表。这是我的“分析器”。我还有一个秒表来记录整个节目。这是我的“分析器分析器”。
我将程序配置为发布模式、任何 CPU(在 x64 计算机上)并禁用优化。
当我在禁用探查器的情况下运行程序时,我得到如下信息:
Line | Ticks
------------------------------|----------
|
Total time: | 359
当我在启用探查器的情况下运行它时,我得到如下信息:
Line | Ticks
------------------------------|----------
|
int n = 100; | 3
BigInteger f = 1; | 12
for (int i = n; i > 1; i--) | 325
{ |
f *= i; | 539
} |
|
Total time: | 1710
Stopwatch overhead: | 831
理想情况下,两种情况下花费在代码上的时间应该相等,但秒表似乎在其自己的运行时间内出现了开销。
现在,需要分析程序的每一行通常没有意义,因为它通常采用分而治之的方法效果更好。您通常可以从分析代码块开始,然后缩小任何性能问题的范围。
此外,在大多数应用程序中,平均代码行将比测试程序中的代码慢很多。这意味着秒表开销将会减少。
但是,使用秒表时仍然存在开销,特别是在使用大量时。
那么接下来的问题是:
使用秒表进行分析的最有效方法是什么?如何最大限度地减少开销?将秒表包裹在单个语句中是否值得?
感谢您的反馈。