gpt4 book ai didi

c# - 使用 Stopwatch 分析 .NET 应用程序

转载 作者:可可西里 更新时间:2023-11-01 08:44:27 26 4
gpt4 key购买 nike

似乎没有可以逐行分析的免费* .NET 性能分析器。因此,我正在研究使用 Stopwatch 进行分析。

*免费即自由,即许可包括商业应用。

编辑:为了回应那些告诉我“购买分析器”的人,我愿意,但如果我能花那么多钱,我会把它花在别的东西上。我试图说服我的老板,一个剖析器是值得的,但运气不佳。这个问题主要是出于好奇。我永远不会将秒表视为真正分析器的替代品。

我有一个小测试应用程序(用 C# 编写),用于测量在每行基础上使用秒表时的性能差异。测试代码是这样的:

int n = 100;
BigInteger f = 1;
for (int i = n; i > 1; i--)
{
f *= i;
}

这是完整的代码:http://pastebin.com/AvbQmT32

每行代码我都有一个秒表。这是我的“分析器”。我还有一个用于整个程序的秒表。这是我的“探查器探查器”。

我将程序配置为 Release模式、任何 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

理想情况下,两种情况下花在代码上的时间应该相等,但似乎秒表的开销出现在它们自己的运行时间内。

现在,通常不需要分析程序的每一行,因为分而治之的方法通常效果更好。您通常可以从分析代码块开始,然后缩小任何性能问题的范围。

此外,在大多数应用程序中,平均代码行会比测试程序中的代码慢很多。这意味着 Stopwatch 的开销会更少。

但是,使用秒表时仍然存在开销,尤其是当您使用很多时。

那么问题来了:

使用秒表进行分析的最有效方法是什么?我怎样才能最大限度地减少开销?将 Stopwatch 包裹在单个语句中是否值得?

感谢您的反馈。

最佳答案

考虑到我们经常通过 Single responsibility principle 直观地编程,不仅在类型方面,而且在功能方面,我会说没有任何意义逐行分析应用程序。您将对分析“单一职责”比分析每一行更感兴趣。

当然,在某些情况下您也需要获得信息。但是不要在所有应用程序中使用它,而是在函数的单个部分或单个函数中使用它。在这种情况下,StopWatch 是最佳选择。考虑到 StopWatch.NET Class,所以 它甚至是最小的开销。您不应查看绝对,而应查看相对 值。

希望这对您有所帮助。

关于c# - 使用 Stopwatch 分析 .NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com