使用Thread.Sleep来防止线程占用CPU

时间:2015-10-12 10:08:38

标签: c# multithreading

为了防止线程在循环中处理数据时占用CPU时间,我见过(并且已经使用过自己)的常见模式看起来像这样:

foreach (itemInACollection)
{
    // do some processing on the item
    // ...
    // ...

    Thread.Sleep(1);
}

我不是特别喜欢这个解决方案,并希望找到一种更好的方法来完成同样的事情。

我的问题是双重的,第一个涉及现有代码库,不适合进行太多改动,第二个涉及构建新解决方案。

  1. 还有另一种方法可以防止线程在占用CPU时占用CPU 以上述例子中的方式处理数据(即使用时 循环并迭代每个项目)?
  2. 我意识到没有提供上述例子的更多信息 是相当广泛的,但有其他模式,提供更好的 处理(同步)a中的大量数据的方式 后台线程?*
  3. *注意:我意识到不同的数据类型可能有不同的解决方案更适合它们的实现(和容器类型),但我想知道是否有更好的模式来处理对象的集合(例如数组)。 / p>

3 个答案:

答案 0 :(得分:2)

为什么你的线程不应该首先占用CPU? 线程是一个(内存)昂贵的对象,运行它,然后放弃它。

管理系统资源并不是您的项目处理代码的责任。

如果遇到性能问题,应将此管理转移到调用此代码的代码。

当简单地处理独立项时,Parallel.ForEach可能是一个不错的选择。当你可以使用所有这些时,为什么只需要1个CPU。

答案 1 :(得分:1)

问题非常广泛。我会给你一些指示:

答案 2 :(得分:1)

如果你有很多工作要做,你应该这样做。这通常不会产生任何问题,因此通常无需解决。