我发现了一个衡量函数性能的好问题,答案建议使用 Stopwatch 如下
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
但是,如果您在多处理器机器下运行,这是否有效?线程可以切换到另一个处理器,可以吗?同样的事情也应该在 Enviroment.TickCount 中。如果答案是肯定的,我应该将我的代码包装在 BeginThreadAffinity 中,如下所示
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
附言
切换可以发生在线程级别,而不仅仅是处理器级别,例如,如果函数在另一个线程中运行,那么系统可以将其切换到另一个处理器,如果发生这种情况,切换后秒表是否有效?
我不仅使用 Stopwatch 进行性能测量,而且还使用 Thread.Sleep 模拟计时器功能(以防止调用重叠)