如何在c#中优化或限制zip使用(DotNetZip)的CPU使用率?

时间:2011-04-29 03:04:10

标签: c# cpu-usage dotnetzip

好日子的家伙

我有一个应用程序,用于使用DotNetZip库归档文件夹。我注意到,当它进入实际的“压缩”过程时,它占用了100%的CPU。这个应用程序将与另一个应用程序(一个tcp聊天应用程序)一起使用,所以我真的需要使用它作为尽可能少的CPU。

有什么办法可以安全地限制cpu吗?我试过降低优先级,但没有什么区别。我现在唯一能做的就是将亲和力设置为1核心,使其使用50%。但当然这只适用于多核计算机。

3 个答案:

答案 0 :(得分:7)

默认情况下,DotNetZip将在多个线程上运行,以提供更快的压缩,但代价是CPU和内存利用率。在多核系统上,如果有足够的I / O吞吐量,这可以占用所有CPU的100%。

如果您不想这样,可以将ZipFile.ParallelDeflateThreshold设置为-1。这说“永远不要使用多个线程来压缩”。这仍将消耗单个线程可以获得的所有cpu;在单核,单CPU机器上,仍然是100%。典型的当前发行笔记本电脑是双核机器;在这种情况下,它将显示50%的CPU使用率,因为一个核心将完全饱和..

如果您在多核计算机上运行,​​并且您希望您的tcp通信应用程序继续畅通无阻,您可以在后台线程中启动DotNetZip工作,并设置我上面提到的属性。为了获得更多隔离,除了设置parellel阈值属性外,您还可以将DotNetZip分解为一个单独的进程,并在该进程上设置亲和力+优先级。

答案 1 :(得分:4)

降低优先级是你想要的,不一定强迫进程只使用任意数量的CPU,如50%。

这意味着该进程将使用尽可能多的未使用的处理能力,并且您的其他更重要的进程仍然可以正常运行,就像Zip进程没有运行一样所有

我认为低优先级进程只使用100%的CPU,因为没有别的。一旦你启动并运行其他进程并再次尝试,你会注意到Zip进程不会100%使用。

答案 2 :(得分:2)

通过降低优先级,您正在做您需要做的事情。如果适用,将亲和力设置为1也会有所帮助。

如果另一个进程需要CPU,您的进程很乐意退出,因此用户不应该注意到速度减慢。使用100%的CPU没有任何问题,除非你正在使用它。从理论上讲,您希望应用程序在需要时使用CPU,并在需要时放弃。