Si su PC está experimentando una fuga de memoria de Silverlight de referencia muy baja, esta guía le ayudará a solucionarlo.
Aprobado: Fortect
- Descargar software de origen: 1,18 KB
Actualmente no hay un generador de perfiles de espacio para Silverlight
Si alguna vez ha programado en Silverlight, una persona probablemente se preguntará si el GC (recolector de basura) recopila cada vez más sus objetos de memoria. ¿Qué pasa si resulta que los obstáculos lo tendrán en cuenta a lo largo de la vida útil de su aplicación? ¿Lo entendió?
Los perfiladores de almacenamiento .NET clásicos no funcionan bien con las aplicaciones Silverlight. Entonces, si tenemos poca memoria y queremos investigar típicamente el problema, la única forma de resolver el problema principal es convertir esta solución útil en la aplicación WPF particular, que en mi escenario fue frustrante en el mejor de los casos, era casi imposible.
¿Cuándo debería realmente utilizar un detector de fugas?
Aprobado: Fortect
Fortect es la herramienta de reparación de PC más popular y eficaz del mundo. Millones de personas confían en él para mantener sus sistemas funcionando de forma rápida, fluida y sin errores. Con su sencilla interfaz de usuario y su potente motor de análisis, Fortect encuentra y soluciona rápidamente una amplia variedad de problemas de Windows, desde la inestabilidad del sistema y los problemas de seguridad hasta la gestión de la memoria y los cuellos de botella en el rendimiento.
El detector de fugas de memoria interna que creé está diseñado para usarse cuando crea que uno de los objetos que escribe no se está recopilando, aunque el recolector de basura necesitará hacerlo. Puede usar un detector de escape de memoria para rastrear este comportamiento en particular.
¿Cómo utilizo el detector de memoria de aplicaciones Silverlight?
Para usar mi bandera de salida de memoria, primero agregue el objeto que desea: rastree llamando a la ruta AddReference
del detector en el constructor del objeto. Luego, cuando el tipo de objeto ya debería ser recolectado como basura, hablo con el método Check
para garantizar que se haya recolectado y que ya no esté más visible en la memoria.
¿Cómo hago para que el recolector de basura recupere objetos incluso si el detector de fugas de memoria está accediendo a ellos?
El secreto detrás de este detector de fuga de memoria radica en cómo funciona su clase WeakReference
. WeakReference
es definitivamente una clase que proporciona las capacidades para hacer referencia a un almacén de objetos existente para evitar que el objeto sea recolectado por cortesía del recolector de basura actual. Puede encontrar más información sobre la región vinculada con la clase WeakReference
aquí.
El Código Uno: Presentación
El detector de fugas de memoria mantiene una lista de inicio llamada elementsList
, que consta de detalles de ObjectStruct
. Cada elemento contiene un nuevo WeakReference
para el que el objeto trackedobject plus contiene valores de depuración. Puede utilizar StackTrace ()
en cualquier lugar para identificar la tienda de fotografías del objeto rastreado. Este campo puede hacerle encontrar el fabricante de la solución de almacenamiento que se ha filtrado.
El código se divide en tres métodos estáticos principales. Se deben llamar los dos para comenzar, el último, SignalDisposed
, es para solucionar problemas. Métodos:
-
Agregar enlace
principal: agrega un nuevo objeto que desea monitorear al detector de ubicación. Puede elegir si desea desarrollar “StackTrace” al crear un objeto. El objeto constructor es realmente un buen lugar para llamar a este método.
Comprobar
: utilice este método para volver a comprobar el estado de la memoria. Un buen lugar para ser forzado directamente La llamada de esta llamada puede ser potencialmente una notificación inactiva a través de su aplicación rrn que puede restablecer y recopilar la mayoría de sus objetos ya creados. Cada llamada a todos los procesos Check
incrementa el trato de compilación estática en uno, dándonos un método para preservar el seguimiento de los objetos rastreados cada vez que se crean normalmente. El comando Debugger.Break ()
prohíbe la aplicación en un elemento, por lo que es muy posible que verifique todos los objetos en la memoria. SignalDisposed
: mi experiencia al descubrir fugas de memoria con un detector mientras trabajaba siempre en el complemento de Firefox para la Web semántica me llevó a la última parte sobre la necesidad de variables booleanas va Indica si comúnmente Dispose
el dispositivo monitoreado alguna vez ha sido llamado o no. Para depurar la transferencia de llamadas, use este método en el método Dispose ()
para actualizar realmenteAceptar scripts en el que puede que se haya traído el método Dispose ()
, pero el objeto permanece en la memoria . Notas:
- Las tres ejecuciones tienen un condicional
("DEBUG")
típico que a su vez le permite usar un signo de pérdida de memoria en su proyecto independientemente del rendimiento en la versión final actual de su aplicación. hacer. Aquí se pueden encontrar automáticamente más datos y técnicas sobre el atributoConditional
. - La clase es cautelosamente segura.
Ideas para el desarrollo futuro
Sería bueno saber qué objeto está realmente asociado con los objetos rastreados que usan memoria.