【发布时间】:2021-11-03 17:55:31
【问题描述】:
在BackgroundWorker 线程中使用Thread.Sleep(0) 有什么危害吗?有什么好处吗?
我将BackgroundWorker 用于冗长的数据库查询、数据表构建、https Web 查询等。这些任务有时需要五秒钟才能完成。我以为我观察到BackgroundWorker 使 UI 的响应性稍差,但我可能弄错了。所以,我将Thread.Sleep(0) 放在BackgroundWorker 代码中。这真的对我有帮助吗?伤到我了吗?
编辑:我正在尝试使 UI 线程更具响应性。我相信Sleep(0) 会在紧密循环期间为 UI 线程腾出时间,并使 UI 更具响应性,但也许我错了。我不在乎后台任务需要多长时间。
【问题讨论】:
-
你可以考虑切换到async
-
如果有的话,它应该会降低性能。 sleep(0) 不可行,只会消耗CPU时间。
-
@Stefan,我认为OP并不关心调用
Sleep(0)的线程的性能。 OP 正在询问它是否会提高 other 线程的性能。 Documentation for the Thread class暗示Sleep(0)等价于Yield(),所以问题就相当于问Thread.Yield()是否会提升其他线程的性能。 -
它在同一个 CPU 上运行对吧?不太可能,但甚至可能是同一个核心。我试图指出它主要是浪费资源。此外,如果您需要此类措施,则表明正在发生一些可疑的事情。我建议听从克劳斯的建议。
-
我正在尝试使 UI 线程更具响应性。我相信 Sleep(0) 会为 UI 线程腾出时间并使其更具响应性,但也许我错了。
标签: c# multithreading backgroundworker thread-sleep