【发布时间】:2010-11-06 01:00:20
【问题描述】:
我发现自己经常对一小段代码进行基准测试,以查看哪种实现最快。
我经常看到基准代码不考虑jitting 或垃圾收集器的cmets。
我有以下简单的基准测试功能,我已经慢慢进化了:
static void Profile(string description, int iterations, Action func) {
// warm up
func();
// clean up
GC.Collect();
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
用法:
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
这个实现有什么缺陷吗?是否足以证明实现 X 比实现 Y 在 Z 迭代中更快?你能想出什么方法来改善这一点吗?
编辑 很明显,基于时间的方法(而不是迭代)是首选,是否有人有任何实现时间检查不影响性能的实现?
【问题讨论】:
标签: c# .net performance profiling