Actualización: Los cambios para introducir estilos VCL en XE2 han eliminado la pérdida de memoria. Así que supongo que fue involuntario después de todo.¿Por qué Themes.pas filtra el singleton TThemeServices cuando se vincula a un archivo DLL
Me encontré con una fuga de memoria VCL hoy, en Themes.pas. Solo ocurre para las DLL. El código de unidad de finalización es tan así:
finalization
if not IsLibrary then
InternalServices.Free;
InternalServices
es un producto único que se crea en la demanda cuando se llama a la función ThemeServices
. Muchas DLL no tienen UI, por lo que nunca crees este singleton. Sin embargo, tengo un complemento COM para Excel que da como resultado esta manifestación de fugas.
La fuga no me molesta particularmente porque esta DLL nunca se carga y descarga repetidamente del mismo proceso. Y sé cómo podría arreglar la fuga usando la variable global ThemeServicesClass
.
Mi pregunta, sin embargo, es preguntar si alguien puede explicar por qué este código es la forma en que es. Parece bastante deliberadamente codificado de esta manera. Por mi vida no puedo encontrar una explicación para esta fuga intencional.
que tiene varias QC informes con el estado abierto: 90368, 84990, 66013 –
@Sertac Usted sabe que yo tenía la intención de presentar una Informe de control de calidad i f No pude encontrar una explicación. El código parecía tan intencional que no me imaginé que sería un error y nunca consideré buscar control de calidad. Debo decir que las respuestas a esos informes de control de calidad son demasiado deprimentemente familiares. Los remitentes presentan las líneas del código fuente de VCL que flaquean abiertamente, y Tomohiro Takahashi pide un proyecto de muestra para reproducirlo. ¡Lo pone fuera de la presentación de informes! –
Eso, y otras formas que lo desaniman ... Conozco la sensación ... Por cierto, algunos de los reporteros/comentaristas han configurado 'IsLibrary' como falso para una solución alternativa, lo que me hace sospechar si hay alguna buena razón para código en absoluto. –