Question

J'utilise ANTS Profiler mémoire pour essayer de déterminer pourquoi continue de croître de ma demande utilisation de la mémoire.

Je lance l'application et prendre plusieurs clichés au fil du temps. Je vois que les instances en direct de IWbemClassObjectFreeThreaded et ManagementBaseObject ne cesse d'augmenter au fil du temps. En regardant la référence de classe explorateur Je vois que IWbemClassObjectFreeThreaded est référencé par ManagementBaseObject, et 100% des ManagementBaseObjects sont des racines GC, mais ils ne semblent jamais être nettoyé. Quand puis-je faire?

Était-ce utile?

La solution

Ceci est un problème inhabituel, mais il peut arriver. WMI est COM base, l'IWbemClassObject est une interface COM qui obtient une enveloppe de RCW. Ces emballages ne sont pas ramassées jusqu'à ce que les courses de fil finaliseur. Il est techniquement possible d'exécuter un grand nombre de requêtes WMI mais pas faire assez de travail avec les résultats pour obtenir le garbage collector à courir.

avec ce Diagnostiquer Perfmon.exe, Analyseur de performances. Clic droit sur le graphique, Ajouter des compteurs, la mémoire .NET CLR et ajoutez le # 0 Gen Collections contre. Sélectionnez votre programme dans la liste en bas. Observez le compteur pendant que votre programme est en cours d'exécution. Vous aurez ce problème si elle n'est pas tic-tac vers le haut.

Si tel est le cas, passez en revue votre code et de vérifier si elle a encore un sens pour exécuter tant de requêtes, mais jamais ou rarement les résultats. Une solution consiste à les compter et tous, disons, 100.000 fois appel GC.Collect () et GC.WaitForPendingFinalizers ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top