2011-03-21 2 views
2

j'ai un service Windows qui crée 10+ fils qui:appels Blocking (attente, appels com) à thread STA

  • faire leur travail, puis ENTRER état WaitForMultipleObjects jusqu'à ce qu'ils soient repris à nouveau ..
  • chaque thread crée méthode des appels de composants TDCOMConnection sur son AppServer puis ferme la connexion

le service fonctionne très bien, mais je l'ai vu la mémoire des problèmes fuites.

Je suis simplement curieux de savoir si ce problème peut être lié au pompage de messages.

J'ai toujours pensé que un message de pompage dans des threads STA ne doit être appliqué quand j'utiliser com marshalling (dans la situation que j'ai un proxy entre deux threads)

Mais aujourd'hui, je l'ai lu quelque part que dans les appels de blocage cas Je devrais prendre soin des messages. Est-ce vrai?

Cependant fonctionne toujours Mon application correctement, ne se bloque pas ...

Peut-être que je devrais utiliser: CoWaitForMultipleHandles au lieu de: WaitForMultipleObjects?

Des idées à ce sujet?

Répondre

2

Je ne crois pas qu'utiliser WaitForMultipleObjects plutôt que CoWaitForMultipleHandles entraînera des fuites de mémoire. La fonction que vous utilisez dépend vraiment de vous mais ne devrait pas avoir d'impact sur votre fuite.

Pour résoudre ce problème, je pense que vous devez obtenir des diagnostics détaillés sur vos fuites.

+0

Oui, je vais devoir creuser, mais je suis juste curieux de savoir si je devrais traiter les messages dans mes fils STA .. – Paul

+0

@Paul Difficile à dire sans en savoir plus à ce sujet. Voyez-vous des problèmes comme vous le faites actuellement? –

+0

effectivement pas ... sauf de la petite .. fuite de mémoire. Il me semble que les threads appelant les méthodes com + sont la cause de mes problèmes, car si je supprime les lignes qui appellent ces méthodes pour voir si les objets Task sont alloués/.deallocated correctement alors tout fonctionne bien et la mémoire ne grandit pas. .. – Paul