Application C# - Réduire l'Utilisation du PROCESSEUR

J'ai un multithread application C#, où la logique de base se trouve dans un Timer.Elapsed gestionnaire d'événement. Le gestionnaire d'événement contient 2 for boucle qui exécute un maximum de n * n = 5 * 5 = 25 times.

L'application fonctionne bien sur mon PC. J'ai couru VS 2010 Profiler à l'encontre de l'application et de l'utilisation moyenne du PROCESSEUR à 20%.

La société testeur dit que sur son PC ce sauts entre 50% et 100% sur son PC. Ceci est à l'origine des problèmes de performance pour lui.

  • Est-ce que je peux faire pour y remédier?
  • Qu'est-utilisation élevée de l'UC signifie vraiment?
  • Cela pourrait-il avoir un impact sur son PC?
  • Est-il possible de dire à une application d'utiliser seulement X montant de
    le CPU?

Toute aide serait appréciée.

  • Le nombre de fois que la boucle ne s'exécute que signifie quelque chose dans le contexte de ce qu'il exécute. Si vous exécutez une opération coûteuse 25 fois ça pourrait être un gros problème. Si vous le résumer à 25 il ne sera pas question.
  • Quelle est la fréquence de votre minuterie de cuisson? Et ne vous attendez la fin de l'opération avant de démarrer la minuterie de nouveau, ou avez-vous juste gardez coups de pied hors de votre boucle, encore et encore, peu importe si le précédent est terminé?
  • Minuteur s'exécute à chaque seconde. Dans le timer gestionnaire d'événements, j'arrêt de la minuterie, dans la première ligne de code et de le relancer dans la dernière ligne de code. Effectivement, cela crée une 1 seconde de délai entre les événements. Le code entre le démarrage et l'arrêt de la minuterie, effectue quelques calculs en mémoire sur un ConcurrentDictionary, qui peut croître de façon très importante. Les calculs sont assez simples, mais qui sont fondées sur de grandes quantités de données. Pas d'interaction avec l'INTERFACE utilisateur qui se passe dans ce gestionnaire d'événements, donc je ne suis pas à l'aide d'une Minuterie, ni un BackgroundWorker. ConcurrentDictionary est mis à jour par différents événements.
  • J'ai d'abord eu ce code dans un thread, qui avait un tout en boucle, en boucle sur une variable de contrôle de boucle, c'est à dire while(variable) { //du Code }. Cette approche a été moins efficace que d'habitude plus de ressources. Donc je suis passé à une minuterie, ce qui réduit l'utilisation CPU.
InformationsquelleAutor c0D3l0g1c | 2010-11-08