vb6 memory-management memory-leaks

VB6 pérdida de memoria



memory-management memory-leaks (6)

¿Puede un programa VB6 que no contiene la palabra clave ''Nuevo'' tener pérdidas de memoria?

Si es así, por favor brinde un ejemplo.


¿Cuál es esta obsesión con lo nuevo con respecto a las filtraciones de memoria? No veo ninguna relación aparte de asignar otro objeto tocando la variable de referencia después de configurarlo en Nothing.

Si haces esto, probablemente tengas un error lógico de todos modos. No usar New simplemente significa que explotas en su lugar, difícilmente mi idea de "arreglar" algo.

Las peores filtraciones pueden implicar llamadas de API como las rutinas OLE o GDI que requieren limpieza / desasignación explícita de estructuras de datos implícitamente asignadas.

Pero como dije, asociar Nuevo con pérdidas de memoria me parece una locura.


... y no olvides pérdidas de memoria en OCX


Para resumir las respuestas hasta ahora: llamar a otro componente podría introducir pérdidas de memoria. El componente podría tener errores, o podrías estar haciendo un mal uso. El componente podría ser un OCX o un DLL (incluidas las llamadas API a una DLL de Windows, que es una excelente manera de perder memoria y recursos de Windows sin mencionar muchos otros problemas emocionantes).

Y un punto pedante: puede crear objetos usando CreateObject , por lo que podría perder memoria a través de referencias circulares sin usar New . Y un día cuando se ha señalado en los comentarios, también puede crear referencias circulares con variables de formulario sin usar New . Pero creo que el objetivo de la pregunta era si las fugas de memoria VB6 pueden tener otras causas además de las referencias circulares.

La respuesta de Recursive no causa una pérdida de memoria: el recuento de referencias ordena la memoria de cada ejecución del ciclo. Consulte mi comentario sobre la respuesta.


Podría estar llamando a una DLL de un tercero que tiene pérdidas de memoria.


Sí, podría. Antes de enterarme acerca de una pérdida de memoria en una llamada API de Windows específica, un programa VB6 que escribí que Transparent Blits utilizado exhibía una pérdida de memoria. Entonces, aunque la filtración no estaba en el programa en sí, era en una de las funciones que VB6 llamó en la API de Win32.


Tuvimos una fuga utilizando variables globales en un módulo mientras se ejecutaba en COM +. Esto fue hace mucho tiempo, no recuerdo los detalles.