gpt4 book ai didi

c# - 多处理器机器中秒表的最佳实践?

转载 作者:太空狗 更新时间:2023-10-29 19:38:15 24 4
gpt4 key购买 nike

我找到了一个很好的question用于测量功能性能,答案建议使用秒表如下

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 模拟定时器功能(以防止调用重叠)

最佳答案

如果函数本身不是多线程的(例如,它不会生成其他线程/进程并等待它们完成),那么唯一的问题是您的机器。

如果您的机器正忙于做其他事情,它可能会使您的测试无效(例如,在进行 CPU 密集型测试时编码 H.264 视频)。同样,如果您使用所有物理内存来测试受内存限制的东西,那么它可能会使您的结果无效。

所以一般原则是,在进行此类测试时,机器应处于最小到正常的负载下。除此之外,没有多处理问题。是的,该程序可以在运行时交换内核,但这样做的开销要么是您测量时间的一小部分,要么测量时间太小以至于系统时间测量的粒度成为问题。

关于c# - 多处理器机器中秒表的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com