Edited out: Ursprünglich zwei Fragen, eine selbst getestet und habe die Antwort bekommen.C# limitierender Thread CPU-Auslastung
Ich erstelle einen gewundenen Leser/Schreiber, der über Dateien in einem Ordner-Set sieht. Es tut dies alle 5 Minuten oder weniger, wenn ein Benutzer es angibt.
Mein aktuelles Problem ist, dass der Thread die Dateien mit etwas zu viel Gefräßigkeit betrachten wird. Ich möchte den Thread auf maximal 30% der CPU beschränken (oder eine vom Benutzer angegebene Menge, falls sie es schneller/langsamer wollen). Der Grund dafür ist, dass dies ein Programm ist, das immer eingeschaltet sein soll, und ich möchte nicht, dass es das Surfen im Internet stört oder andere Programme gleichzeitig verwendet. Ich persönlich neige dazu, zu beachten, dass Thread-Programme, die 100% der CPU verwenden, mit anderen Programmen verschraubt werden, selbst wenn sie auf eine niedrigere Priorität eingestellt sind, und versuche dies zu vermeiden.
Ich dachte über die Verwendung von PerformanceCounter, um die CPU-Auslastung zu überprüfen, hoffentlich das Programm zu identifizieren und mehr Schlafzyklen hinzuzufügen, wenn die Leistung (der CPU als Ganzes, oder mein Programm es findet) zu starten . Ich habe keine Dokumentation über die Begrenzung der Thread-CPU-Nutzung gefunden, außer "lol, warum stören?", Zu "nicht wirklich machbar" ohne Gründe warum (was völlig in Ordnung ist - die meisten Leute wollen den Thread so schnell wie möglich erledigen und es könnte nicht sein Möglichkeit, dies in .Net oder einer anderen C# -Bibliothek zu tun.
Kennt jemand einen anderen Weg, als seine Priorität niedriger zu setzen oder mehr Overhead hinzuzufügen, indem er PerformanceCounter/einen anderen CPU-Monitor verwendet? Vielen Dank.
Check out [diese] (http://stackoverflow.com/a/482622/884410) Antwort –
Sind Sie sicher, dass Ihr Problem CPU-Auslastung und nicht die Disk-I/O? –
@MattBurland - yup - gerade dabei, das zu posten.Ich habe gerade eine "optimale Threadpool-Tiefe für die Untersuchung von CPU-gebundenen Aufgaben" gemacht. Ich hatte 8/16/32/80/800 Threads, die auf meinen 4/8 Kernen bei 100% laufen, aber da die Pool-Threads auf 'THREAD_PRIORITY_BELOW_NORMAL' gesetzt sind, funktionierte mein Browser usw. alles gut. –