【发布时间】:2010-12-03 04:56:13
【问题描述】:
我创建了一个简单的类来对我的一些方法进行基准测试。但它准确吗?我对基准测试、时间安排等有点陌生,所以我想我可以在这里寻求一些反馈。另外,如果它很好,也许其他人也可以使用它:)
public static class Benchmark
{
public static IEnumerable<long> This(Action subject)
{
var watch = new Stopwatch();
while (true)
{
watch.Reset();
watch.Start();
subject();
watch.Stop();
yield return watch.ElapsedTicks;
}
}
}
你可以这样使用它:
var avg = Benchmark.This(() => SomeMethod()).Take(500).Average();
有什么反馈吗?它看起来是不是相当稳定和准确,还是我遗漏了什么?
【问题讨论】:
-
+1 非常原始的实现。我会尝试它来衡量它是否准确足够用于我所做的即插即用测试类型。谢谢!
-
你能不能只使用
var avg = Benchmark.This(SomeMethod).Take(500).Average();而不是使用lambda? -
在这个例子中我实际上可以,是的。只是这样写是为了更清楚地表明我正在发送一个可能是 lambda 或任何东西的 Action。
-
如果您使用的是 VS 2010 beta2,并将 Svish 的代码复制到由 Project/Add Class 创建的新类中:请注意对使用 System.Collections 的引用;不会自动添加到课程中...您将需要它。
-
您可以使用这个开源框架:BenchmarkDotNet。它包括秒表使用、GC 预调用、预热、设置进程优先级、thred、ProcessorAffinity-mask、用于基准竞赛的 api 以及带有结果的漂亮控制台输出。
标签: c# benchmarking feedback