Wie kann ich die CPU -Verwendung eines Zip -Prozesses (DOTNETZIP) in C#optimieren oder begrenzen?

StackOverflow https://stackoverflow.com/questions/5827393

  •  27-10-2019
  •  | 
  •  

Frage

Guten Tag Jungs

Ich habe eine App, mit der ich einen Ordner mit der Dotnetzip -Bibliothek archiviere. Ich stelle fest, dass beim tatsächlichen "Reißverschluss" -Prozess 100% der CPU verwendet werden. Diese App wird in Verbindung mit einem anderen (einer TCP -Chat -Anwendung) verwendet, sodass ich dies wirklich so weniger CPU wie möglich verwenden muss.

Gibt es eine Möglichkeit, die CPU sicher zu begrenzen? Ich habe versucht, die Priorität zu senken, aber es macht keinen Unterschied. Das einzige, was ich gerade habe, ist, die Affinität nur auf 1 Kern zu setzen, damit sie 50%verwendet. Aber das würde natürlich nur auf Multi-Core-Computern funktionieren.

War es hilfreich?

Lösung

Die Priorität ist das, was Sie wollen, und zwingt den Prozess nicht unbedingt, nur eine willkürliche Menge der CPU wie 50%zu verwenden.

Dies bedeutet, dass der Prozess genauso viel verwendet wird ungebraucht Verarbeitungskapazität der CPU und dass Ihre anderen wichtigeren Prozesse weiterhin fast so funktionieren können, als ob der ZIP -Prozess überhaupt nicht ausgeführt worden wäre.

Ich sollte denken, dass der Prozess mit niedriger Priorität nur 100% der CPU verwendet, weil nichts anderes ist. Sobald Sie Ihren anderen Prozess (eS) zum Laufen erhalten haben und es erneut versuchen, werden Sie feststellen, dass der ZIP -Prozess nicht 100%verwendet wird.

Andere Tipps

DotnZIP wird standardmäßig auf mehreren Threads auf Kosten der CPU und Speicherauslastung ausgeführt, um eine schnellere Komprimierung zu erhalten. Auf einem Multi-Core-System kann dies 100% Ihrer gesamten CPUs konsumieren, wenn ausreichend E/A-Durchsatz.

Wenn Sie dies nicht wollen, können Sie die Zipfile.ParallelDeflatethreshold auf -1 festlegen. Dies heißt "Verwenden Sie niemals mehrere Threads, um zu komprimieren". Dadurch konsumiert immer noch die gesamte CPU, die ein einzelner Thread erhalten kann. Auf einer Einzel-CPU-Maschine, die immer noch 100%betragen wird. Ein typischer Stromausfall-Laptop ist eine Dual-Core-Maschine; In diesem Fall wird es 50% CPU -Verwendung aufweisen, da ein Kern vollständig gesättigt ist.

Wenn Sie auf einem Multi-Core-Computer ausführen und möchten, dass Ihre TCP-Kommunikations-App nicht impliziert wird, können Sie die Dotnetzip-Arbeit in einem Hintergrund-Thread starten und die oben erwähnte Eigenschaft festlegen. Für mehr Isolation können Sie den DotNIZIP in einen separaten Prozess einbeziehen und die Affinity + -Priorität für diesen Prozess einstellen, zusätzlich zur Festlegung der Parellel -Schwellenwerteigenschaft.

Wenn Sie die Priorität senken, tun Sie das, was Sie tun müssen. Wenn Sie die Affinität auf einen festlegen, hilft dies auch bei zutreffendem.

Wenn ein anderer Prozess eine CPU benötigt, tritt Ihr Prozess gerne beiseite, sodass der Benutzer keine Verlangsamung bemerken sollte. Es ist nichts Falsches daran, 100% der CPU zu verwenden, es sei denn, Sie schließen sie ab. Theoretisch möchten Sie, dass Ihre App CPU verwendet, wenn sie sie benötigt, und geben Sie sie auf, wenn sie dies nicht tut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top