5

良い一日

DotNetZipライブラリを使用してフォルダをアーカイブするために使用するアプリがあります。実際の「圧縮」プロセスでは、CPUを100%使用していることに気付きました。このアプリは別のアプリ(tcpチャットアプリケーション)と組み合わせて使用​​されるため、CPUの使用量をできるだけ少なくするためにこれが本当に必要です。

CPUを安全に制限する方法はありますか?優先度を下げてみましたが、違いはありません。私が今持っている唯一のことは、50%を使用するようにアフィニティを1コアのみに設定することです。しかしもちろん、それはマルチコアコンピューターでのみ機能します。

4

3 に答える 3

7

DotNetZipはデフォルトで複数のスレッドで実行され、CPUとメモリの使用率を犠牲にして、より高速な圧縮を実現します。マルチコアシステムでは、十分なI / Oスループットがあれば、これによりすべてのCPUが100%消費される可能性があります。

これが不要な場合は、ZipFile.ParallelDeflateThresholdを-1に設定できます。これは、「圧縮に複数のスレッドを使用しないでください」という意味です。これでも、単一のスレッドが取得できるすべてのCPUを消費します。シングルコア、シングルCPUマシンでは、それでも100%になります。典型的な現在問題のラップトップはデュアルコアマシンです。この場合、1つのコアが完全に飽和するため、CPU使用率は50%になります。

マルチコアマシンで実行していて、tcp通信アプリを妨げられずに続行したい場合は、バックグラウンドスレッドでDotNetZipの作業を開始し、上記のプロパティを設定できます。より分離するために、DotNetZipを別のプロセスに分解し、parellelしきい値プロパティを設定することに加えて、そのプロセスにアフィニティ+優先度を設定することができます。

于 2011-05-07T19:04:57.823 に答える
4

優先度を下げることはあなたが望むことであり、必ずしもプロセスに50%のような任意の量のCPUのみを使用するように強制する必要はありません。

これは、プロセスがCPUの未使用の処理能力をできるだけ多く使用し、他のより重要なプロセスが、Zipプロセスがまったく実行されていないかのように機能できることを意味します。

優先度の低いプロセスはCPUを100%しか使用していないと考える必要があります。これは、他に何も使用されていないためです。他のプロセスを起動して再試行すると、Zipプロセスが100%使用されないことがわかります。

于 2011-04-29T03:09:14.117 に答える
2

優先度を下げることで、あなたがする必要があることをしています。アフィニティを 1 に設定すると、該当する場合にも役立ちます。

別のプロセスが CPU を必要とする場合、あなたのプロセスは喜んで脇に追いやられるので、ユーザーはスローダウンに気付かないはずです。CPU を占有しない限り、CPU を 100% 使用しても問題はありません。理論的には、アプリが必要なときに CPU を使用し、不要なときに放棄する必要があります。

于 2011-04-29T03:09:52.653 に答える