我在算法中有一个方法,它在非常大的数据集上运行一个非常紧密的循环。我最初编写了单线程版本,效果还不错,但是需要花费很长时间。现在我想加速它,所以使用ThreadPool并行化工作。问题是这会导致我的CPU使用率达到95-100%,我有点意料之中。然而,性能已经显著提高,但我认为如果减少所有上下文切换,性能可能会更好。这也使我的其他程序有点卡顿,因为它们必须与线程争夺CPU资源。
我的问题是我该如何解决这个问题?我唯一能想到的是限制同时运行的线程数量,但这可能会使我的算法变慢,因为只有很少的线程能同时运行。我也不想在我的线程中添加sleeps,因为我只需要尽快完成算法运行。
编辑:几个人提到了使用TPL。我认为这是一个很好的想法,但不幸的是,我忘记提到我被困在使用.NET 3.5的情况下,因为父应用程序尚未发布使用.NET 4的版本。
我的问题是我该如何解决这个问题?我唯一能想到的是限制同时运行的线程数量,但这可能会使我的算法变慢,因为只有很少的线程能同时运行。我也不想在我的线程中添加sleeps,因为我只需要尽快完成算法运行。
编辑:几个人提到了使用TPL。我认为这是一个很好的想法,但不幸的是,我忘记提到我被困在使用.NET 3.5的情况下,因为父应用程序尚未发布使用.NET 4的版本。
SetPriorityClass
是降低线程池优先级以支持其他应用程序的正确方法。 - Ben VoigtSetPriorityClass
函数降低整个应用程序的优先级,让它只使用浏览器不需要的CPU资源。在.NET中,Process.PriorityClass
属性可以帮助你实现此功能。 - Ben Voigt