Fuerza C # aplicación utilice un único núcleo en un PC con un procesador multinúcleo

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Hola chicos esta pregunta puede parecer raro, pero estoy usando el jugador Haptek personas masilla para mi aplicación C # y he visto gente dice en los foros que no funciona bien con un procesador multinúcleo. Mi aplicación se ejecuta bien en mi portátil Core 2 Duo, pero queda mucho cuando trato de ejecutar en un ordenador de sobremesa de cuatro núcleos. Estaba pensando en la investigación de este para mí y en ese caso, tendría que forzar mi aplicación para ejecutarse en un solo núcleo. Es posible que en C #? Gracias!

¿Fue útil?

Solución

Cuando una variable de Process proc sostiene el proceso se preocupa por (Process.GetCurrentProcess() para el proceso en ejecución, su obtención a partir GetProcesses() o GetProcessesByName() etc para otro proceso continuación:.

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor es una identidad basado en cero de un solo núcleo. ProcessorAffinity es una máscara de bits, por lo que 1 permite cero núcleo, 2 permite un núcleo, 3 permite núcleos cero y uno, 4 permite que dos núcleo, y así sucesivamente.

Me gustaría probar esta completamente . Las posibilidades son muy fuerte de que esto va a dañar su rendimiento, en la reducción de la capacidad de hacer uso de los diferentes núcleos, que es después de todo una ventaja general.

Otros consejos

Si la aplicación es de un solo subproceso, no va a tomar ventaja de múltiples núcleos. Sin embargo, es posible que el núcleo puede golpear el hilo alrededor de entre los núcleos. Dudo que esta es la causa de sus problemas de rendimiento.

Si desea atar el hilo hacia abajo a un solo núcleo (no estoy seguro si esto se puede garantizar), es posible que desee echa un vistazo a la propiedad System.Diagnostics.ProcessThread.ProcessorAffinity, aunque nunca he utilizado yo mismo.

  • No es realmente posible en C #. Bueno, no hay manera que sé de. Usted necesidad de interoperabilidad con el que funciona.

  • ¿Está utilizando múltiples hilos? Si no es así - HM - lo siento - no hay mucho que puede hacer. aplicaciones de interfaz de usuario estándar no están utilizando múltiples núcleos de todos modos.

Básicamente, las aplicaciones no utilizando hilos (Los elementos de trabajo utilizan hilos) son inherentemente solo núcleo de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top