簡體   English   中英

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

[英]How can I optimize or limit the CPU usage a zip process (DotNetZip) in c#?

美好的一天,伙計們

我有一個應用程序,用於使用 DotNetZip 庫歸檔文件夾。 我注意到,當它進入實際的“壓縮”過程時,它會占用 100% 的 CPU。 這個應用程序將與另一個應用程序(tcp 聊天應用程序)一起使用,所以我真的需要它來盡可能少地使用 CPU。

有什么辦法可以安全地限制CPU? 我試過降低優先級,但沒有任何區別。 我現在唯一擁有的是將親和力設置為 1 個核心,以便它使用 50%。 但當然,這只適用於多核計算機。

默認情況下,DotNetZip 將在多個線程上運行,以提供更快的壓縮,但會犧牲 CPU 和 memory 利用率。 在多核系統上,如果有足夠的 I/O 吞吐量,這可能會消耗所有 CPU 的 100%。

如果您不想這樣做,可以將 ZipFile.ParallelDeflateThreshold 設置為 -1。 這說“永遠不要使用多個線程來壓縮”。 這仍然會消耗單個線程可以獲得的所有 cpu; 在單核、單 CPU 機器上,仍然是 100%。 典型的當前問題筆記本電腦是雙核機器。 在這種情況下,它將表現出 50% 的 cpu 使用率,因為一個核心將完全飽和。

如果您在多核機器上運行,並且希望您的 tcp 通信應用程序繼續暢通無阻,您可以在后台線程中啟動 DotNetZip 工作,並設置我上面提到的屬性。 為了獲得更多隔離,您可以將 DotNetZip 分解為一個單獨的進程,並在該進程上設置關聯性 + 優先級,此外還可以設置並行閾值屬性。

降低優先級是你想要的,不一定強制進程只使用任意數量的 CPU,比如 50%。

這意味着該進程將使用盡可能多的未使用的 CPU 處理能力,並且您的其他更重要的進程仍然能夠 function 幾乎就像 Zip 進程根本沒有運行一樣。

我應該認為低優先級進程只使用 100% 的 CPU,因為沒有別的。 一旦您啟動並運行其他進程並再次嘗試,您會注意到 Zip 進程不會使用 100%。

通過降低優先級,您正在做您需要做的事情。 在適用時,將親和力設置為 1 也會有所幫助。

如果另一個進程需要 CPU,您的進程將很樂意讓步,因此用戶不會注意到速度變慢。 除非你占用它,否則使用 100% 的 CPU 沒有任何問題。 理論上,您希望您的應用程序在需要時使用 CPU,並在不需要時放棄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM