C# 创建非片状性能测试的好方法是什么

C# 创建非片状性能测试的好方法是什么,c#,benchmarking,performance-testing,C#,Benchmarking,Performance Testing,我已经写了一些常用的方法,其中我发现性能非常重要。在进行了几次更改以修复明显的性能缺陷之后,我想进行一些测试,以验证性能不会因为将来的更改而降低。然而,我发现这些测试通常非常脆弱(可能是由于垃圾收集、自动化测试服务器上的其他活动等原因)。我想知道的是,对于编写和维护这些类型的测试,有没有公认的最佳实践 到目前为止,我的大多数测试如下所示: runMyCode(); // for assembly loading/jitting var sw = Stopwatch.StartNew(); for

我已经写了一些常用的方法,其中我发现性能非常重要。在进行了几次更改以修复明显的性能缺陷之后,我想进行一些测试,以验证性能不会因为将来的更改而降低。然而,我发现这些测试通常非常脆弱(可能是由于垃圾收集、自动化测试服务器上的其他活动等原因)。我想知道的是,对于编写和维护这些类型的测试,有没有公认的最佳实践

到目前为止,我的大多数测试如下所示:

runMyCode(); // for assembly loading/jitting
var sw = Stopwatch.StartNew();
for (iterations) { runMyCode(); }
var time = sw.Elapsed;

// then either
Assert.Less(time, TimeSpan.FromSeconds(some reasonably generous amount of time));
// or
// time some other piece of benchmark code (e. g. a framework method 
// which runMyCode() layers on top of). And do:
Assert.Less(time.TotalSeconds, someMultiplier * benchmarkTime.TotalSeconds);
我必须提高稳定性的一个想法是将测试存储记录在数据库中,并且只有在最后N次未通过基准测试时才会失败。

看看这篇文章:。案例的主要提示:

  • 您应该使用处理器缓存的预热来获得正确的结果

  • 您应该在单个处理器上运行代码(
    Process.GetCurrentProcess().ProcessorAffinity=new IntPtr(1)

  • 您应该为线程和进程设置高优先级

  • 您应该在基准测试之前运行
    GC.Collect()

  • 您应该多次运行基准测试,并取结果的中位数

    您还可以使用这个免费的开源.NET框架来创建适当的基准:

看看这篇文章:。案例的主要提示:

  • 您应该使用处理器缓存的预热来获得正确的结果

  • 您应该在单个处理器上运行代码(
    Process.GetCurrentProcess().ProcessorAffinity=new IntPtr(1)

  • 您应该为线程和进程设置高优先级

  • 您应该在基准测试之前运行
    GC.Collect()

  • 您应该多次运行基准测试,并取结果的中位数

    您还可以使用这个免费的开源.NET框架来创建适当的基准:


我不知道您使用的是visual studio还是mono develop,但您可以使用speed profiler工具,如:

红门:


或者使用默认的visual studio性能分析器。请参阅本教程:(更多信息请访问internet)。

我不知道您是在使用visual studio还是mono develop,但您可以使用speed profiler工具,如:

红门:


或者使用默认的visual studio性能分析器。请参阅本教程:(internet上的更多内容)。

请看。请看。正如我在问题中试图指出的那样,我并不希望执行一次分析运行,而是希望通过自动测试防止将来的性能下降。这些工具能做到吗?哦,对不起,我误会了。Redgate可以做到这一点。对于VisualStudioPerformanceProfiler,我从未尝试过这种测试。您可以尝试这两种方法(vsp集成在VisualStudio中,redgate为您提供了一种完整的试用版),正如我在问题中试图指出的那样,我并不打算执行一次分析运行,而是希望通过自动化测试防止将来的性能下降。这些工具能做到吗?哦,对不起,我误会了。Redgate可以做到这一点。对于VisualStudioPerformanceProfiler,我从未尝试过这种测试。您可以同时尝试这两种方法(vsp集成在visual studio中,redgate为您提供了一种完整的试用版)