2008-09-17 7 views
4

L'une de nos applications héritées repose fortement sur PostThreadMessage() pour la communication inter-thread, nous avons donc augmenté USERPostMessageLimit dans le registre (chemin) au-delà de la normale 10.000. Toutefois, la documentation sur MSDN stipule que «cette limite doit être suffisamment grande: si votre application dépasse la limite, elle doit être redessinée pour éviter de consommer autant de ressources système». [1]Conséquences de la modification de USERPostMessageLimit

Quelqu'un peut-il m'éclairer sur la façon dont il consomme exactement trop de ressources système? Quelles sont exactement les ressources du système? Puis-je contrôler l'utilisation d'une application par les ressources système? Toute information serait très utile pour décider si cela vaut la peine de consacrer du temps et des efforts à la refonte de cette application.

+0

Je pense utiliser la même solution. Avez-vous eu des problèmes? –

Répondre

1

Les ressources auxquelles il fait référence sont celles utilisées par les threads pour recevoir/gérer les messages. Vous pouvez surveiller la taille du pool de threads & autres ressources à l'aide du Gestionnaire des tâches (voir Affichage-> Sélectionner les colonnes). Il peut vous aider à identifier la ressource spécifique si le consommateur est verrouillé, recherchez un nombre de ressources supérieur même si vos threads augmentent.

Cependant; Si vous avez besoin d'augmenter USERPostMessageLimit, alors le producteur de messages surchargera simplement le consommateur du message. En augmentant cette limite, vous aggravez votre problème sans le réparer. Réduire USERPostMessageLimit à la valeur par défaut, et si votre producteur de message ne peut pas publier le message, essayez de dormir avant de réessayer, permettant au thread consommateur d'effacer certains messages.

+0

Pouvez-vous préciser laquelle des "Colonnes de la page de processus" du Gestionnaire des tâches (poignées, fils, objets USER, etc.) nous devrions surveiller et comparer à cette limite de 10 000? J'ai testé un programme qui se bloque avec "Pas assez de quota était disponible pour traiter cette commande" en raison de cette limite, mais je n'ai pas vu l'une des colonnes qui a augmenté à 10 000. Est-ce que l'une de ces colonnes vous montre exactement combien sont dans la file d'attente? – skeletank

+0

Désolé, cette question a été répondue il y a longtemps et mes connaissances à ce sujet sont très floues. La limite de 10 Ko correspond aux messages et non à la limite de ressources, et chaque type de ressource aura des capacités différentes, et ce n'est pas un ratio de 1: 1. C'est le sommet que votre besoin de regarder dehors. En général, la solution consiste à augmenter la consommation de vos messages. Ne pas augmenter la capacité d'envoyer plus. –

+0

Dans mon cas, il m'est difficile d'essayer d'augmenter la consommation de messages car mon programme est un complément à Autodesk Revit. Je ne peux pas voir à l'intérieur de la fonction de l'API Revit que j'appelle, donc je suis incapable de voir ce qui provoque l'arrêt de la consommation. J'ai déjà signalé le problème à Autodesk mais j'ai augmenté le USERPostMessageLimit entre-temps. – skeletank

Questions connexes