2008-10-30 40 views
11

Estoy desarrollando un programa C# y tengo una función que consume demasiada CPU. Me gustaría saber una forma de controlar esto por código (no con cualquier aplicación externa) y restringir el porcentaje de uso de la CPU. Por ejemplo, si utiliza el 90% del uso de la CPU, para que mi aplicación consuma solo un 20%, incluso si se vuelve más lenta. Debe hacerse automáticamente y desde dentro de la aplicación. Si proporciona una clase, sería fantástico.¿Cómo restringir el uso de CPU que toma un programa C#?

+0

Esto suena como una muleta: atacar el síntoma en lugar de un problema. ¿Por qué no publicas lo que intenta hacer el método y nos pides ayuda para optimizar el método? –

+1

Podría ser una muleta, pero puedo pensar en algunas aplicaciones para esta idea, tales como: una tarea de fondo vinculada a la CPU para analizar números, un nodo en un entorno informático distribuido de PC de oficina, un programa de inteligencia artificial para supervisar y aprender de mi hábitos de uso –

+1

Para limitar el uso de la CPU al 50%, ejecútelo en doble núcleo; para un límite del 25%, ejecútelo en cuatro núcleos: D – Alan

Respuesta

16

No sé si puede hacerlo, pero puede cambiar la prioridad de subproceso del subproceso de ejecución a través de la propiedad Priority. Lo establecería por:

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

Además, no creo que realmente quiera taparlo. Si la máquina está inactiva, le gustaría que se ocupe de la tarea, ¿verdad? ThreadPriority ayuda a comunicar esto al programador.

+0

Eso ayudará a algunos, y es la única forma que conozco de hacerlo. –

+0

Esta es la mejor y única forma de hacerlo correctamente. – Will

+1

He visto aplicaciones de Windows que pueden limitarse a sí mismas para decir ... digamos el 50% de la CPU. La tasa de error fue inferior al 1%. –

0

Puede ralentizar un bucle llamando a Thread.Sleep (milisegundos) dentro del bucle. Eso le devuelve la CPU al programador.

Pero 'consumir demasiada CPU' me hace pensar que puede tener problemas más fundamentales. ¿Este hilo está sondeando y esperando algo más? Si es así, debería considerar el uso de Eventos u otro mecanismo de señalización basado en kernel.

0

Supongo que necesita consultar algún tipo de API de sistema operativo para averiguar qué cantidad de CPU está consumiendo y tomar decisiones de regulación (como Thread.Sleep) a partir de eso.

Cuestiones relacionadas