Eine Anwendung, an der ich mitarbeite, löst eine in C geschriebene Komponente aus.
Der C-Prozess macht ein ziemlich schweres Knirschen und wenn Sie nicht vorsichtig sind, können Sie Ihre CPU wirklich hämmern.
Gibt es eine Möglichkeit, ein Limit für externe Prozesse zu setzen, die von .NET erzeugt werden?
Ich habe gesehen artivcle beim Festlegen eines festen Speicherlimits auf Betriebssystemebene, gibt es eine ähnliche Sache für die CPU?
Nicht in Windows. Sie können jedoch die Prozesspriorität verringern, wodurch die Wahrscheinlichkeit verringert wird, dass der problematische Prozess auf der CPU geplant wird und andere (vermutlich höhere Priorität) Anwendungen stören. Zum Beispiel aus Ссылка :
%Vor%Denken Sie daran, wenn Sie nichts anderes auf der Box haben, wollen Sie wahrscheinlich, dass dieser Prozess die gesamte verfügbare CPU verbraucht.
Sie können die CPU-Affinität auch festlegen, wenn sie sich in einer Multi-Prozessor-Box befindet, die Verarbeitung auf bestimmte Cores beschränkt und andere für andere Anwendungen frei lässt. Im Allgemeinen kann das Betriebssystem die Anwendungsthreads jedoch gut einplanen, sodass das Festlegen der Prozesspriorität wahrscheinlich zu einem besseren Gesamtergebnis führt. Siehe Wie kann ich die Prozessoraffinität in .NET setzen?
Ich hatte das gleiche Problem. Ich löste es mit SetInformationJobObject Kernel32 Win Api und JOBOBJECT_CPU_RATE_CONTROL_INFORMATION Struktur.
Mein größeres Problem war, diese Struktur in c # darzustellen (benutzt "union"). Hoffentlich fand ich eine "Mono" -Beschreibung dieser Struktur.
%Vor%Um die CPU-Beschränkung zu aktivieren:
%Vor%Das folgende Beispiel ist voll funktionsfähig.
Ich hoffe, das ist Hilfe.
Mit freundlichen Grüßen
-Thierry -
%Vor%