Rap*_*ael 5 c# cpu-usage dotnetzip
美好的一天
我有一个应用程序,我用它来存档使用DotNetZip库的文件夹.我注意到,当它进入实际的"压缩"过程时,它占用了100%的CPU.这个应用程序将与另一个(一个TCP聊天应用程序)一起使用,所以我真的需要这个使用尽可能少的CPU.
有什么办法可以安全地限制cpu吗?我试过降低优先级,但没有什么区别.我现在唯一能做的就是将亲和力设置为1核心,使其使用50%.但当然这只适用于多核计算机.
默认情况下,DotNetZip将在多个线程上运行,以便以CPU和内存利用率为代价提供更快的压缩.在多核系统上,如果有足够的I/O吞吐量,这可以占用所有CPU的100%.
如果您不想这样,可以将ZipFile.ParallelDeflateThreshold设置为-1.这说"永远不要使用多个线程来压缩".这仍将消耗单个线程可以获得的所有cpu; 在单核,单CPU机器上,仍然是100%.典型的当前发行笔记本电脑是双核机器; 在这种情况下,它将展示50%的CPU使用率,因为一个核心将完全饱和.
如果您在多核计算机上运行,并且您希望您的tcp通信应用程序继续畅通无阻,您可以在后台线程中启动DotNetZip工作,并设置我上面提到的属性.为了获得更多隔离,除了设置parellel阈值属性外,您还可以将DotNetZip分解为一个单独的进程,并在该进程上设置亲和力+优先级.
降低优先级是您想要的,不一定强制进程仅使用任意数量的 CPU,例如 50%。
这意味着该进程将使用尽可能多的未使用的 CPU 处理能力,并且其他更重要的进程仍然能够正常运行,就像 Zip 进程根本没有运行一样。
我应该认为低优先级进程只使用了 100% 的 CPU,因为没有其他进程。一旦您启动并运行其他进程并重试,您会发现 Zip 进程不会使用 100%。