Nous avons une méthode qui, en raison du threading dans l'application cliente, nécessite l'utilisation de SynchronizationContext.SynchronizationContext.Post (...) dans le gestionnaire d'événements de transport
Il y a un peu de code que l'un de mes collègues a écrit qui ne me «sent» pas bien, et un profileur de performance me dit que beaucoup de traitement est utilisé dans ce morceau de code.
void transportHelper_SubscriptionMessageReceived(object sender, SubscriptionMessageEventArgs e)
{
if (SynchronizationContext.Current != synchronizationContext)
{
synchronizationContext.Post(delegate
{
transportHelper_SubscriptionMessageReceived(sender, e);
}, null);
return;
}
[code removed....]
}
Ce juste ne se sent pas droit à moi, que nous affichons essentiellement la même demande à la file d'attente de fil de IUG ... cependant, je ne vois pas anyhting oviously problématique soit, autre que la performance de cette zone de code.
Cette méthode est un gestionnaire d'événements attaché à un événement déclenché par notre assistant de couche de messagerie de niveau intermédiaire (transportHelper) et il existe dans un service qui gère les requêtes provenant de l'interface graphique. Est-ce que cela semble être un moyen acceptable de s'assurer que nous n'obtenons pas d'erreurs croisées? Sinon, y a-t-il une meilleure solution?
Merci
merci, une grande panne. À la fin, j'ai déplacé ce traitement sur une sous-classe de Stack qui est surveillée à un intervalle spécifié. Le code à l'intérieur de la zone [Code Remeoved] est exécuté pour chaque membre de la pile à l'intervalle spécifié. Je crois que la raison de la dégradation des performances était due au fait que, dans la section [Code supprimé], certains appels ne se trouvaient toujours pas sur le thread de l'interface utilisateur, recourant plusieurs fois avant de pouvoir s'exécuter sur l'interface utilisateur. fil. Le déplacement de ces appels vers MonitoredStack a résolu ce problème. –
miguel