Ahm*_*aid 8 c# performance multiprocessor
我发现了一个测量功能性能的好问题,答案建议使用秒表,如下所示
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Run Code Online (Sandbox Code Playgroud)
但如果您在多处理器机器下运行,这是否有效?线程可以切换到另一个处理器,可以吗?同样的事情也应该在Enviroment.TickCount中.如果答案是肯定的,我应该将我的代码包装在BeginThreadAffinity中,如下所示
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
Run Code Online (Sandbox Code Playgroud)
PS
切换可以在线程级别上发生,而不仅仅是处理器级别,例如,如果函数在另一个线程中运行,那么系统可以将其切换到另一个处理器,如果发生这种情况,秒表在切换后是否有效?
我不是仅使用秒表进行性能测量,而是使用Thread.Sleep模拟定时器功能(以防止呼叫重叠)
如果函数本身不是多线程的(例如它不会产生其他线程/进程并等待它们完成)那么唯一的问题就是你的机器.
如果您的计算机忙于执行其他操作,则可能会使您的测试无效(例如,在进行CPU绑定测试时编码H.264视频).同样,如果您在测试内存限制的内容时使用所有物理内存,那么它可能会使结果无效.
因此,一般原则是在进行此类测试时,机器应处于最小到正常负载下.除此之外,没有多处理问题.是的,该程序可以在运行时交换核心,但这样做的开销要么是您测量时间的一小部分,要么测得的时间太短,以至于系统时间测量的粒度是个问题.
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |