FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Buenos días.
Gracias por responder, les comento que sigo complicado con este asunto que parece tan sencillo. He decidido crear una unidad aparte para probar la aplicación sin hilos y me doy cuenta que el uso de la memoria aumenta considerablemente hasta que se llega al out memory. acá dejo el código, solo creo un objeto TADOconnection y un TADODataset que se destruyen a ki entender correctamente. Ya he activado el ReportMemoryLeaksOnShutDown := True y no me arroja ninguna violación de memoria.
Este código lo ejecuto cada unos 20 segundos en un Timer |
#2
|
|||
|
|||
Bueno, sigo probando y con solo ejecutar el código de conexión a la Base de Datos comienza a subir el consumo de memoria. En buena teoría se ejecute o no la conexión al final debería destruirse el objeto.
|
#3
|
||||
|
||||
Cita:
Eso no te va a reportar ninguna violación de memoria. Sirve para (como bien dice su nombre) reportar pérdidas de memoria (normalmente por recursos no liberados correctamente) al finalizar la aplicación.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Como mides el consumo de memoria? Usar el task manager, no importa el OS, no es muy util porque los OS actuales cachean memoria que da loco y pueden reportar que "usan" el 90% de la memoria pero no es la que EN ESTE INSTANTE esta usando la app, es la que el OS le cachea en el tiempo.
Tienes que usar un profiler especializado, o mirar los contadores de windows para precision.... ----- Hay varias cosas que resaltan, pero estas son las mas sospechosas: 1- Lo PEOR: Usas referencias globales! MAXIMO ERROR EN MULTI HILOS! NUNCA usar globales en multi hilos. Nunca. Eso no solo crea contención, sino que GARANTIZA DEADLOOCKS en un lenguaje como Delphi. 2- Me late que el mayor problema es:
Como le asignas un POINTER de un objeto a OTRO, usando una INTERFACE que es refcounted???? 3- Usar un timer... ok, pero es mucho mas simple si usas un ciclo con un sleep. Luego mira como reestructuras el código para formar una maquina de estados. Eso debe hacer el código mas claro y eliminar bugs que da miedo. Esto ademas elimina el problema de que cuando tengas un error, vas a reintentar de forma infinita hasta que muera el programa, que asi es como esta... 4- O mejor usa una librería adecuada para eso, quizás http://docwiki.embarcadero.com/RADSt...amming_Library.
__________________
El malabarista. |
#5
|
|||
|
|||
Muchas Gracias por la respuesta de todos, aún no me queda claro el tema, voy a revisar las propuestas y les comento, por ahora decirles que conecta.cheq es un TADOdataset que se representa en una grilla de datos, lo hago de esta forma pasando el Recordset del objeto tabla para poder abrir y cerrar automáticamente una conexión a una base de datos externa. No se si tienen otra idea, pensé en llenar los datos que devuelve el TADODataset Tabla en un TClientDataset, pero como no se la estructura de los campos(nombres y tipos) me complica un poco.
|
#6
|
|||
|
|||
Buenos días a todos.
usando la instrucción
obtengo el mensaje que adjunto (no supe como incrustarlo acá en el mensaje). Me pueden indicar como descifrarlo, porque no lo entiendo muy bien. Gracias de antemano! |
#7
|
||||
|
||||
Fíjate que los tres primeros hacen referencia a clases; TParameters, TList y Tbquix_hilo
Te está diciendo que al acabar el programa no has liberado elemento/s de esas clases. Si escribes un programa con este código:
Lo ejecutas y lo cierras, obtendrás este mensaje: Si descomentas la línea del Free y lo vuelves a ejecutrar, verás desaparece. Por lo tanto en el que te da a tí, revisa los lugares donde estás creando elementos de esas clases para ver si los estás destruyendo correctamente. A medida que vayas corrigiendo los errores, deberían desaparecer de ese mensaje.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
|||
|
|||
OK. Muchas Gracias por la aclaración, voy a revisarlo de inmediato, comento los resultados
|
#9
|
||||
|
||||
Cita:
Personalmente creo que deberías utilizar try..finally para liberar recursos, en lugar de hacerlo en los try..except Cada estructura tiene su función y el try..except se usa para capturar excepciones. Mezclar la gestión de errores, con la liberación de recursos, no me parece buena idea. AÑADO: Además veo que en algún caso, puedes estar intentando destruir cosas que aun no has creado (por ejemplo, si se produce algún problema al conectar).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ejecución bloqueada. Hilos de ejecución | muli | Desarrollo en Delphi para Android | 10 | 28-11-2016 15:16:03 |
Crear Hilos de Ejecución con TIdFTP | JAI_ME | Varios | 12 | 13-12-2013 18:28:39 |
Ayuda con Hilos de ejecucion | kurono | Varios | 19 | 15-01-2011 15:36:40 |
Problema con hilos de ejecucion | gueritox | OOP | 1 | 14-08-2010 15:26:06 |
Hilos de ejecucion | el toluca | Varios | 2 | 29-06-2004 22:59:04 |
|