2008-08-13 6 views
6

He usado el CF Remote Performance Monitor, sin embargo, esto parece solo rastrear la memoria inicializada en el mundo administrado en lugar del mundo no administrado. Bueno, solo puedo presumir esto ya que los números que figuran en el generador de perfiles están muy por debajo del máximo permitido (32 mb en CE 5). Perfilar una aplicación en particular con el RPM me mostró que el uso total de todas las cachés solo logra llegar a unos 12mb y luego se reduce lentamente a medida que (supongo) que algo no administrado comienza a reclamar más memoria. El control deslizante de memoria en Sistema también muestra que el dispositivo tiene poca memoria. Si elimino el proceso, el control deslizante muestra toda la memoria que regresa. Por lo tanto, debe ser (?) Este proceso gestionado el que se está tragando la memoria.¿Cuál es la mejor manera de encontrar TODA tu memoria cuando desarrollas en el Framework Compacto?

¿Hay alguna manera simple (¿cómo?) De cómo se puede rastrear el uso de la memoria no administrada de alguna manera que me permita relacionarla con las llamadas P/Invoke correspondientes?

EDITAR: Para todos los re-etiquetadoras no es .NET, etiquetar la pregunta de esta manera confunde las cosas. Es .NETCF/Compact Framework. Sé que parecen ser similares, pero son diferentes porque .NET oscila, mientras que CF es básicamente un envoltorio alrededor de NotImplementedException.

+1

".NET oscila mientras que CF es básicamente una envoltura alrededor de NotImplementedException." ¡Me encanta esa cita! – Stormenet

Respuesta

3

Intente habilitar Interop logging.

Además, si usted tiene acceso al código de la DLL nativa que está utilizando, mira esto: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

+0

Sé que esta es una publicación anterior pero espero que veas esto y respondas. El segundo enlace va a http://msdn.microsoft.com/en-us/vstudio/aa496123, que parece ser un sitio de nivel superior para Visual Studio. ¿Recuerdas a qué te vinculaste? –

1

Definitivamente he estado luchando con problemas no administrados en un C# administrado aplicación por un tiempo - es no es fácil.

Lo que me ha resultado más útil es tener un resultado regular en un archivo de registro de texto. Por ejemplo, puede imprimir la salida de GlobalMemoryStatus cada par de minutos junto con el registro cada vez que carga un formulario nuevo. Desde allí, al menos puede ver que la memoria se erosiona gradualmente o que una gran cantidad de memoria desapareció en momentos específicos del día.

Para nosotros, hemos encontrado una pérdida gradual de memoria todo el día, siempre que el dispositivo se esté utilizando. A partir de allí finalmente descubrimos que el dispositivo de escaneo de código de barras se estaba inicializando sin ninguna razón en particular en nuestra clase base de Formulario (culpo al desarrollador anterior! :-)

La configuración de este registro puede ser una molestia, pero para nosotros grandes dividendos en el largo plazo, especialmente con el dispositivo en uso en vivo podemos obtener datos reales, instrumentación, trazas de la pila de excepciones, etc.

1

Ok, estoy usando C++ en la CE, no en C# por lo que este puede no ser útil, pero ...

Uso un paquete llamado Entrk toolbox que supervisa el uso de memoria y recursos, fugas y excepciones en Windows CE. Como una versión CE ligera de limitchecker. El truco la mayoría de las veces

Cuestiones relacionadas