Force C# Aplicativo para usar um único núcleo em um PC com um processador multicore

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

  •  26-09-2019
  •  | 
  •  

Pergunta

Olá pessoal, essa pergunta pode parecer estranha, mas estou usando o Haptek People Putty Player para o meu aplicativo C# e vi pessoas dizerem nos fóruns que não funciona bem com um processador multicore. Meu aplicativo funciona bem no meu laptop Core 2 Duo, mas fica muito quando tento executá -lo em um desktop quad core. Eu estava pensando em investigar isso para mim e, nesse caso, teria que forçar meu aplicativo a executar em um único núcleo. Isso é possível em C#? Obrigado!

Foi útil?

Solução

Onde um Process variável proc mantém o processo de que você se preocupa (Process.GetCurrentProcess() para o processo de execução, obtê -lo de GetProcesses() ou GetProcessesByName() etc. para outro processo. Então:

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

O IdealProcessor é uma identidade baseada em zero de um único núcleo. O Processorafinity é uma fase de bits, então 1 permite o núcleo zero, 2 permite o núcleo um, 3 permite núcleos zero e um, 4 permite o núcleo dois e assim por diante.

Eu teria testado isso completamente. As chances são muito fortes de que isso prejudique seu desempenho, reduzindo a capacidade de usar núcleos diferentes, o que é geralmente uma vantagem.

Outras dicas

Se o aplicativo for um thread único, não aproveitará vários núcleos. No entanto, é possível que o kernel possa aumentar a linha entre os núcleos. Duvido que essa seja a causa dos seus problemas de desempenho.

Se você gostaria de amarrar o tópico a um único núcleo (não tenho certeza se isso pode ser garantido), convém verificar o System.Diagnostics.ProcessThread.ProcessorAffinity Propriedade, embora eu nunca tenha usado isso sozinho.

  • Não é realmente possível em C#. Bem, de jeito nenhum eu sei. Você precisa de interop, com isso funciona.

  • Você está usando vários threads? Caso contrário, hm - desculpe - não muito você pode fazer. Os aplicativos de interface do usuário padrão não estão usando vários núcleos de qualquer maneira.

Basicamente, os aplicativos que não usam threads (itens de trabalho usam threads) são inerentemente de núcleo único.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top