美好的一天,伙计们
我有一个应用程序,用于使用 DotNetZip 库归档文件夹。我注意到,当它进入实际的“压缩”过程时,它会占用 100% 的 CPU。这个应用程序将与另一个(一个 tcp 聊天应用程序)结合使用,所以我真的需要它来尽可能少地使用 cpu。
有什么办法可以安全地限制CPU?我试过降低优先级,但没有任何区别。我现在唯一拥有的是将亲和力设置为 1 个核心,以便它使用 50%。但当然,这只适用于多核计算机。
默认情况下,DotNetZip 将在多个线程上运行,以提供更快的压缩,但代价是 CPU 和内存利用率。在多核系统上,如果有足够的 I/O 吞吐量,这可能会消耗所有 CPU 的 100%。
如果您不想这样做,可以将 ZipFile.ParallelDeflateThreshold 设置为 -1。这说“永远不要使用多个线程来压缩”。这仍然会消耗单个线程可以获得的所有 cpu;在单核、单 CPU 机器上,仍然是 100%。典型的当前问题笔记本电脑是双核机器。在这种情况下,它将表现出 50% 的 cpu 使用率,因为一个核心将完全饱和。
如果您在多核机器上运行,并且希望您的 tcp 通信应用程序继续畅通无阻,您可以在后台线程中启动 DotNetZip 工作,并设置我上面提到的属性。为了获得更多隔离,您可以将 DotNetZip 分解为一个单独的进程,并在该进程上设置关联性 + 优先级,此外还可以设置并行阈值属性。
降低优先级是你想要的,不一定强制进程只使用任意数量的 CPU,比如 50%。
这意味着该进程将尽可能多地使用未使用的 CPU 处理能力,并且您的其他更重要的进程仍然能够运行,就像 Zip 进程根本没有运行一样。
我应该认为低优先级进程只使用 100% 的 CPU,因为没有别的。一旦您启动并运行其他进程并再次尝试,您会注意到 Zip 进程不会使用 100%。
通过降低优先级,您正在做您需要做的事情。在适用时,将亲和力设置为 1 也会有所帮助。
如果另一个进程需要 CPU,您的进程将很乐意让步,因此用户不会注意到速度变慢。除非你占用它,否则使用 100% 的 CPU 没有任何问题。理论上,您希望您的应用程序在需要时使用 CPU,并在不需要时放弃。