5 Stimmen

Folgen einer Änderung von USERPostMessageLimit

Eine unserer Legacy-Anwendungen stützt sich stark auf PostThreadMessage() für die Inter-Thread-Kommunikation, also haben wir USERPostMessageLimit in der Registry (weit) über die normalen 10.000 hinaus erhöht.

In der MSDN-Dokumentation heißt es jedoch, dass "diese Grenze ausreichend groß sein sollte. Wenn Ihre Anwendung das Limit überschreitet, sollte sie umgestaltet werden, damit sie nicht so viele Systemressourcen verbraucht." [ 1 ]

Kann mich jemand aufklären, wie genau sich der Verbrauch von zu vielen Systemressourcen bemerkbar macht? Was genau sind Systemressourcen? Kann ich die Nutzung von Systemressourcen durch eine Anwendung irgendwie überwachen? Jede Information wäre sehr hilfreich, um zu entscheiden, ob es sich lohnt, diese Anwendung neu zu gestalten.

0 Stimmen

Ich denke darüber nach, die gleiche Lösung zu verwenden. Hatten Sie irgendwelche Probleme?

1voto

Martin Spamer Punkte 5327

Die Ressourcen, auf die er sich bezieht, sind diejenigen, die von den Threads für den Empfang/die Bearbeitung der Nachrichten verwendet werden. Sie können die Größe des Thread-Pools und andere Ressourcen mit dem Taskmanager überwachen (siehe Ansicht->Spalten auswählen). Es kann Ihnen helfen, die spezifische Ressource zu identifizieren, wenn der Verbraucher Ressourcen blockiert, suchen Sie nach einer Ressourcenzahl, die ihren Höchststand erreicht, auch wenn Ihre Threads zunehmen.

Wenn Sie jedoch USERPostMessageLimit erhöhen müssen, dann überlastet der Nachrichtenproduzent einfach den Nachrichtenkonsumenten; indem Sie dieses Limit erhöhen, verschlimmern Sie Ihr Problem, anstatt es zu beheben. Reduzieren Sie USERPostMessageLimit auf den Standardwert, und wenn Ihr Nachrichtenproduzent die Nachricht nicht versenden kann, versuchen Sie, vor dem erneuten Versuch zu schlafen, damit der konsumierende Thread einige Nachrichten löschen kann.

1 Stimmen

Können Sie bitte angeben, welche der Spalten der "Prozessseite" des Task-Managers (Handles, Threads, USER-Objekte usw.) wir überwachen und mit dieser 10.000er-Grenze vergleichen sollten? Ich habe ein Programm getestet, das aufgrund dieses Limits mit der Meldung "Für die Verarbeitung dieses Befehls war nicht genügend Kontingent verfügbar" abstürzt, aber ich habe keine der Spalten gesehen, die auf 10.000 angewachsen ist. Zeigt eine dieser Spalten genau an, wie viele sich in der Warteschlange befinden?

0 Stimmen

Tut mir leid, diese Frage wurde schon vor langer Zeit beantwortet, und mein Wissen darüber ist sehr unscharf geworden. Die 10k-Grenze bezieht sich auf die Nachrichten, nicht auf die Ressourcen, und jeder Ressourcentyp hat unterschiedliche Kapazitäten, und es ist kein 1:1-Verhältnis. Es ist die Obergrenze, auf die Sie achten müssen. Im Allgemeinen besteht die Lösung darin, den Nachrichtenverbrauch zu erhöhen. Nicht die Kapazität zu erhöhen, um mehr zu senden.

0 Stimmen

In meinem Fall ist es schwierig, den Nachrichtenverbrauch zu erhöhen, da mein Programm ein Add-in zu Autodesk Revit ist. Ich kann die Revit-API-Funktion, die ich aufrufe, nicht sehen, so dass ich nicht in der Lage bin, zu erkennen, was die Ursache dafür ist, dass der Verbrauch aufhört. Ich habe das Problem bereits an Autodesk gemeldet, aber ich habe in der Zwischenzeit das USERPostMessageLimit erhöht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X