J'ai récemment construit un service utilise un seul thread pour traiter les informations périodiquement. Le service a été créé à l'aide de Microsoft Visual Studio 2010 Express. J'ai remarqué que l'utilisation du processeur a décollé vers la Lune (utilisation du processeur à 100%). Plus tard, par curiosité, j'ai construit un très petit programme, dans lequel tout ce qu'il fait est de démarrer un petit thread, ou un minuteur, puis exécute une boucle incroyablement longue. J'ai également basculé de la construction d'une application console à une application Windows Form. J'ai été capable de réduire mes problèmes en changeant le type de programme à construire.L'utilisation du processeur devient très élevée pendant l'exécution
J'ai essayé abaisser la priorité du fil:
System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Lowest;
J'ai aussi essayé de définir la classe de priorité
Process p = Process.GetCurrentProcess();
p.PriorityClass = ProcessPriorityClass.BelowNormal;
Je pensais aussi que l'utilisation du processeur aurait pu être élevé en raison de l'exécution sur une machine virtuelle. Mais cette théorie ne m'a emmené nulle part. C'est plutôt ridicule. Je ne sais pas où aller d'autre. Je ne sais pas pourquoi démarrer une minuterie ou un thread enverrait mon utilisation du processeur à travers le plafond comme dans le framework .NET. Je n'ai jamais ressenti cela lors de la construction d'objets COM. Est-ce que quelqu'un a des idées brillantes quant à l'endroit où je peux me tourner?
Merci pour votre temps à l'avance.
Le Thread.Sleep (1000) m'a aidé à donner un sens à tout. Le vrai programme est quelque peu complexe. Cela fait partie du très petit programme que j'ai écrit: System.Threading.Thread th = nouveau System.Threading.Thread (nouveau ThreadStart (ThreadFunc)); th.Priority = ThreadPriority.Lowest; th.Start(); public static void ThreadFunc() { System.Threading.Thread.Sleep (10000); ou (long i = 0; i <1000000000; i ++) {} System.Threading.Thread.Sleep (10000); } –
L'intention du programme original était de traiter l'information, mais elle doit fonctionner souvent (par exemple, 1/2 heure ou une heure). Je vois le planificateur de Windows me permet seulement de programmer une tâche seulement aussi fréquemment que tous les jours. Je pensais que j'utiliserais un fil pour suivre l'emploi du temps, mais je commence à sentir que cela ne s'avère pas très intelligent. Donc je suis ouvert aux suggestions. –
Je pense que je peux faire demi-tour et utiliser un planificateur de tâches Windows au lieu d'essayer de faire mon propre truc et utiliser des threads et des minuteries afin de garder mon programme léger. Merci les gars et bien regarder. –