Después de actualizar un proyecto de Delphi 2007 para Delphi 2009 Recibo un desconocido pérdida de memoria, hasta ahora he estado tratando de localizarlo usando FastMM, esto es lo FastMM informes de seguimiento de la pila:Cómo rastrear la pérdida de memoria complicada con fastMM?
A memory block has been leaked. The size is: 20
This block was allocated by thread 0x111C, and the stack trace (return addresses)
at the time was:
40339E [System.pas][System][@GetMem][3412] 534873 [crtl][_malloc]
56D1C4 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3918]
56D316 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3961]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
562D48 [DBCommon.pas][DBCommon][TFilterExpr.PutExprNode][1583]
408E46 [System.pas][System][DynArraySetLength][20464]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
408E92 [System.pas][System][@DynArraySetLength][20486]
528C1B [Forms.pas][Forms][TCustomForm.DoCreate][3260]
171A1A [GetRawStackTrace]
The block is currently used for an object of class: Unknown
The allocation number is: 302844
Y a veces obtengo esto:
A memory block has been leaked. The size is: 20
This block was allocated by thread 0x111C, and the stack trace (return addresses)
at the time was:
40339E [System.pas][System][@GetMem][3412]
534873 [crtl][_malloc]
56D1C4 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3918]
56D316 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3961]
77DC921A [RtlAnsiStringToUnicodeString]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
7726B8F5 [GetProcAddress]
7726B907 [GetProcAddress]
589B1E [ossrv.cpp][MidasLib][DllGetDataSnapClassObject][3163]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
408E92 [System.pas][System][@DynArraySetLength][20486]
The block is currently used for an object of class: Unknown
¿Hay alguna forma mejor de descubrir qué es lo que realmente está causando la pérdida de memoria?
Está creando una o más pérdidas de 20 bytes para cada formulario que abro, lo extraño es que comenzó a suceder después de actualizar a Delphi 2009, sin cambiar el código. –
Si es una cantidad finita, entonces no es un problema, pero si el usuario tiene la opción de abrir cada formulario varias veces, y cada apertura pierde 20 bytes adicionales, entonces tiene una pérdida de memoria lenta pero potencialmente problemática . –
Con 2 GB de RAM, los usuarios tendrán que abrir alrededor de 100 millones de formularios en una sesión antes de que se les acabe la memoria física debido a esta filtración. Afortunadamente para usted, RSI limitará la cantidad de memoria que se puede filtrar por las acciones del usuario aquí :-) –