Pregunta

Estoy utilizando HORMIGAS memoria de perfiles para tratar de determinar por qué el uso de memoria de mi solicitud sigue creciendo.

ejecutar la aplicación y tomar varias instantáneas en el tiempo. Puedo ver que los casos en vivo de IWbemClassObjectFreeThreaded y ManagementBaseObject sigue aumentando con el tiempo. En cuanto a la referencia de clase explorador puedo ver que IWbemClassObjectFreeThreaded es referenciado por ManagementBaseObject, y el 100% de ManagementBaseObjects son GC raíces, pero nunca parece ser limpiado. Cuando más puedo hacer?

¿Fue útil?

Solución

Este es un problema poco común pero puede ocurrir. WMI está basado en COM, el IWbemClassObject es una interfaz COM que recibe un contenedor RCW. Estas envolturas no se limpian en marcha hasta que se ejecuta el subproceso finalizador. Técnicamente, es posible ejecutar una gran cantidad de consultas WMI, pero no hacer lo suficiente el trabajo con los resultados para obtener el recolector de basura para correr.

Diagnosticar esto con Perfmon.exe, Monitor de rendimiento. Haga clic derecho en el gráfico, en Agregar contadores, memoria CLR .NET y agregar el Gen # 0 Colecciones mostrador. Seleccione el programa de la lista inferior. Observar el contador mientras el programa se está ejecutando. Vas a tener este problema si no está corriendo hacia arriba.

Si este es el caso, revisar su código y comprobar si todavía tiene sentido para ejecutar tantas preguntas, pero nunca o rara vez utilizan los resultados. Una solución consiste en contar con ellos y cada, digamos, 100.000 veces llaman GC.Collect () y GC.WaitForPendingFinalizers ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top