1

Je crée un service Windows .NET qui utilise une DLL C++ non gérée. à la fois de mon service et la DLL C++ utilisent multi threading. Je manque de mémoire après un certain temps (heures) pendant le traitement. J'ai essayé de mesurer le nombre de threads en utilisant « compteurs de performance » et je surveille les valeurs suivantes:Compteurs de performance pour les unités d'exécution en cours

# of current logical Threads 
# of current recognized threads 
# of total recognized Threads 

Alors que le premier est stable et sa valeur est raisonnable le 2ème et le 3ème ne sont pas. ils sont toujours en croissance et atteignent un nombre énorme (plus de 1500). Et ils sont égaux !!!!

Devraient-ils être égaux? Je n'ai pas non plus compris de this page si ces compteurs compteront les threads gérés et non gérés.

Je soupçonne que le code non géré est toujours lancer de nouveaux threads au lieu de les réutiliser, mais je ne suis pas sûr.

Quelqu'un peut-il aider? Remerciements

+0

Oui, on dirait que la DLL ne réutilise pas ou ne se débarrasse pas des threads utilisés. –

Répondre

1

Cela ressemble à une fuite. Il est très probable que la DLL non managée ne dispose pas correctement de ses threads.

Afin de vraiment tester ceci écrire une seule application threadée qui utilise cette DLL. Surveiller l'application Si vous remarquez qu'il ne se débarrasse pas des choses correctement, vous avez l'une des deux situations suivantes.

Soit vous n'appelez pas les méthodes correctes dans la DLL pour fermer les ressources (threads). Ou la DLL est mal codée. Le premier est facile à réparer, le second nécessitera l'accès au code source ou aux développeurs originaux.

Si c'est la DLL et vous ne pouvez pas les contacter ou ils ne sont pas disposés à réparer, puis trouver quelque chose d'autre qui fait presque la même chose.

+0

Grand, je l'ai fait comme vous le suggérez (fait une application mono-thread qui utilise cette DLL dans une boucle) et je vois encore augmentation à la fois: de threads reconnus actuels Nombre de Threads totaux reconnus et ils sont toujours égaux Qu'est-ce que cela signifie t-il? –

+0

Cela signifie que la DLL ne libère pas ses propres ressources ou qu'il y a un appel de fonction dans la DLL que vous ne faites pas. Je parierais sur le premier. Si c'est le premier alors vous devez contacter celui qui a construit la DLL et voir s'il y a une mise à jour ou trouver un autre produit qui fait la même chose. – NotMe

Questions connexes