如何在C#中进行性能测试

7

如何在C#中进行性能测试?

目前我所知道的方法是使用:

Stopwatch sw = new Stopwatch();

sw.Start();
{
     //code to test
}
sw.Stop();

有没有其他方法可以做到这一点,或者上述方法是错误的?

只要你计算平均值并不需要它非常精确,对我来说似乎完全没问题。 - fjdumont
@ Maheep,我没有使用任何工具。 - NIlesh Lanke
@NIleshLanke 我同意那些将此问题(https://dev59.com/FnVD5IYBdhLWcg3wXaYd)标记为重复的人。秒表只会告诉你某个操作花费了多少时间,这并不是性能。性能分析器可以让你做各种事情,比如内存消耗等,除了运行所需的时间。 - gideon
1
你尝试过BenchmarkDotNet吗?它可以测试代码运行所需的时间以外的许多其他方面,如GC、内存等 -> https://github.com/dotnet/BenchmarkDotNet 编辑:刚注意到主题上的日期...抱歉。 - Camadas
3个回答

5
Stopwatch是一种很好的、简单的方式来测量特定代码块的执行时间。对于大规模性能测试,有很多好的工具可用,比如在以下SO问题中列出的工具:
如果您自己对代码进行基准测试(使用Stopwatch或其他低级工具),则需要注意以下几点:
  • 在最接近目标环境的环境中运行测试:发布构建,没有调试器连接,类似的硬件。
  • 请记住,代码的第一次运行可能与后续运行具有明显不同的性能特征(由于缓存、JIT-ing、一次性初始化程序等)。如果您对平均执行时间感兴趣,请至少先进行一次“预热”迭代。
几年前,C#博客作者Eric Lippert就这个主题撰写了一个多部分系列文章:

2
更好的选择来测试dotnet中的性能指标是BenchMarkDotnet
例子:
 public class Md5VsSha256
 {       

    [Benchmark]
    public byte[] Sha256() => sha256.ComputeHash(data);

    [Benchmark]
    public byte[] Md5() => md5.ComputeHash(data);
 }

基准测试结果

方法 平均值 误差 标准偏差
Sha256 100.90 微秒 0.5070 微秒 0.4494 微秒
Md5 37.66 微秒 0.1290 微秒 0.1207 微秒

0

基本上,您可以从System.Diagnostics命名空间中的所有内容中受益。例如PerformanceCounter类等。 Stopwatch是您可以用来测量执行时间的替代方案之一。

如果您有一些钱可以花费,您可以使用RedGate Develper Bundle for .NET。它具有性能分析器、内存分析器等功能。

还有其他更便宜的替代方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接