Domanda

Sto sviluppando un programma C # e ho una funzione che consuma troppa CPU. Vorrei sapere un modo per controllarlo tramite il codice (non con alcuna applicazione esterna) e limitare la percentuale di utilizzo della CPU. Ad esempio, se utilizza il 90% dell'utilizzo della CPU, per rendere la mia app consuma solo un 20%, anche se diventa più lenta. Deve essere fatto automaticamente e dall'interno dell'app. Se offri un corso, sarebbe fantastico.

È stato utile?

Soluzione

Non so se puoi farlo, ma puoi cambiare la priorità del thread del thread in esecuzione tramite Proprietà . Lo imposteresti con:

Thread.CurrentThread.Priority = ThreadPriority.Lowest;

Inoltre, non penso che tu voglia davvero limitarti. Se la macchina è inattiva, ti piacerebbe che si occupasse dell'attività, giusto? ThreadPriority aiuta a comunicarlo allo scheduler.

Altri suggerimenti

Puoi rallentare un loop chiamando Thread.Sleep (millisecondi) all'interno del loop. Ciò restituisce la CPU allo scheduler.

Ma "consumare troppa CPU" mi fa pensare che potresti avere problemi più fondamentali. Questa discussione sta eseguendo il polling e sta aspettando qualcos'altro? In tal caso, dovresti considerare l'uso di Events o di altri meccanismi di segnalazione basati sul kernel.

Immagino che sia necessario eseguire una query su un qualche tipo di API del sistema operativo per scoprire quanta CPU stai consumando e prendere decisioni di limitazione (come Thread.Sleep) da quel momento in poi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top