这是修改后的功能:根据社区的建议,随时对其进行修订,使其成为社区Wiki。
static double Profile(string description, int iterations, Action func) { //Run at highest priority to minimize fluctuations caused by other processes/threads Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; Thread.CurrentThread.Priority = ThreadPriority.Highest; // warm up func(); var watch = new Stopwatch(); // clean up GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); watch.Start(); for (int i = 0; i < iterations; i++) { func(); } watch.Stop(); Console.Write(description); Console.WriteLine(" Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds); return watch.Elapsed.TotalMilliseconds;}确保 在启用优化的情况下在Release中进行编译,并在Visual Studio外部运行测试
。最后一部分很重要,因为即使在发布模式下,JIT也会通过附加的调试器来限制其优化。



