Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中优化或限制zip进程(DotNetZip)的CPU使用率?_C#_Cpu Usage_Dotnetzip - Fatal编程技术网

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

如何在c#中优化或限制zip进程(DotNetZip)的CPU使用率?,c#,cpu-usage,dotnetzip,C#,Cpu Usage,Dotnetzip,大家好 我有一个应用程序,用于使用DotNetZip库归档文件夹。我注意到,当它进入实际的“压缩”过程时,它会占用100%的CPU。这个应用程序将与另一个(tcp聊天应用程序)一起使用,所以我真的需要它来尽可能少地使用cpu 有什么方法可以安全地限制cpu吗?我试着降低优先级,但没有什么不同。我现在唯一能做的就是将affinity设置为1 core only,以便它使用50%。当然,这只适用于多核计算机。降低优先级是您想要的,不一定要强制进程只使用任意数量的CPU,比如50% 这意味着进程将使用

大家好

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


有什么方法可以安全地限制cpu吗?我试着降低优先级,但没有什么不同。我现在唯一能做的就是将affinity设置为1 core only,以便它使用50%。当然,这只适用于多核计算机。

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

这意味着进程将使用尽可能多的未使用的CPU处理能力,并且您的其他更重要的进程将仍然能够像Zip进程根本没有运行一样运行


我应该认为低优先级进程只使用了100%的CPU,因为其他的都没有。一旦您启动并运行其他进程并重试,您将注意到Zip进程将不会使用100%。

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


如果另一个进程需要CPU,您的进程将很高兴地退出,因此用户不应该注意到速度减慢。使用100%的CPU没有什么错,除非你占用了它。理论上,您希望应用程序在需要时使用CPU,在不需要时放弃。默认情况下,DotNetZip将在多个线程上运行,以提供更快的压缩速度,同时牺牲CPU和内存利用率。在多核系统上,如果有足够的I/O吞吐量,这可能会消耗所有CPU的100%

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


如果您正在多核计算机上运行,并且希望tcp通信应用程序能够不受阻碍地继续运行,则可以在后台线程中启动DotNetZip工作,并设置我上面提到的属性。为了实现更高的隔离度,除了设置parellel threshold属性外,您还可以将DotNetZip分解成一个单独的进程,并在该进程上设置affinity+优先级

您应该指出,这可以使用低优先级线程来完成;对于像DotNetZip这样的100%托管代码库,不需要启动单独的进程。此属性的工作方式非常好!非常感谢@Cheeso