utilisation du processeur augmente jusqu'à 100% dans une boucle infinie dans le thread

Je suis d'exécution un basé sur le web plate-forme de chat en ASP.NET Application Web, et j'utilise une technique similaire, le temps d'interrogation. Je veux dire, je garde chaque requête web à partir d'un client pour une période de temps spécifique(délai d'attente) ou jusqu'à ce qu'un nouveau message arrive, et puis la réponse est envoyée au client.

- Je garder les clients connectés en mémoire(dictionnaire de l'objet) et quand un nouveau message est envoyé à un client, j'écris ce message dans le récepteur client messages du tableau.
Le Client doit envoyer une requête pour obtenir ses propres messages, et je garde cette requête dans un tableau en mémoire.

Je suis à l'aide de http asynchrone gestionnaire pour les écoutes la demande du client, je suis en gardant les requêtes web dans un tableau en mémoire. J'ai utiliser des threads pour vérifier les nouveaux messages de façon continue à partir de la mémoire (dans le dictionnaire, qui est créé pour chaque client).

Je ne l'utilise pas .net le pool de threads pour vérifier les nouveaux messages ou dépassé les requêtes web.Je créer des threads comme ceci:

System.Threading.Thread t = new Thread(new ThreadStart(QueueCometWaitRequest_WaitCallback));
t.IsBackground = false;
t.Start();

Dans chaque thread QueueCometWaitRequest_WaitCallback méthode, je suis dans une boucle while infinie:

while (true)
{
...
Thread.Sleep(100);
}

Dans cette méthode, je vérifie pour le web demande du temps ou un nouveau message pour chaque Requête Web qui est également conservée dans un tableau en mémoire.

Tout fonctionnait bien jusqu'à ce que j'ai remarqué que l'utilisation du PROCESSEUR atteint jusqu'à 100% dans le temps. (en minutes après le premier client connecté)
Au début de la première demande, tout semble être normal, je veux dire l'utilisation de l'UC n'est pas supérieur à 10%, tandis que le retour d'une réponse au client. Mais dans le temps même avec 2 clients l'utilisation de l'UC augmente jusqu'à 100%. Il semble que l'utilisation du PROCESSEUR est à 100% que lors de l'écriture d'une réponse pour une demande d'un client. Si aucun client n'est de gauche puis tout retour à la normale (utilisation du PROCESSEUR est d'environ 0%) jusqu'à ce nouveau site web demande est effectuée par un client.

Je ne sais pas les fils dans le détail, mais je suis méfiant sur les nouvelles discussions que j'ai créé et fonctionne à l'infini. C'est comme le système d'exploitation donne plus l'utilisation du PROCESSEUR et de la ressource dans le temps puisqu'ils travaillent tout le temps, et ce Fil.Sleep(100) ne fonctionne pas.

Ici est la QueueCometWaitRequest_WaitCallback() méthode:

void QueueCometWaitRequest_WaitCallback()
{
   while (true)
   {
      if (processRequest.Length == 0)
      {
          Thread.Sleep(100);
      }
      else
      {
          for (int i = 0; i < processRequest.Length; i++)
          {
               Thread.Sleep(100);

               //below I am checking for new message or request time out 
               .................
               .................

               //If new message or time out I write to response
          }
      }    
   }
}

J'espère que je pourrais lui expliquer la situation, et je suis ouvert à toute suggestion (comme la mise en oeuvre d'une manière différente)

Si vous pouvez m'aider avec ce problème je vous en seront reconnaissants gratitude,
Grâce

Donc, fondamentalement, vous avez besoin de vérifier les nouveaux messages toutes les N millisecondes? Est-il, ou quelque chose d'autre doit être fait asynchrone? Si juste utiliser async System.Threading.Timer/System.Timers.Timer qui wuld déclencher toutes les N millisecondes.
Est-ce approximativement ce que vous voulez accomplir? while (true){ Thread.Sleep(100); foreach(var req processRequest){performProcessRequest(req);} processRequest.Supprimer(r=>r.RequestCompletedOrTimedOut);}
J'ai besoin de retourner la réponse à un client (nouveau message) ASAP <br/> Puisque c'est une application de chat, le délai de vérification ne devrait pas être trop long, je pense qu'elle doit être plus petite que 1 seconde si je utiliser une Minuterie?
no Oni: Vous avez raison, j'ai besoin de délai d'expiration ainsi même pas de nouveau message

OriginalL'auteur Mehmet | 2012-01-16