Ver Mensaje Individual
  #11  
Antiguo 18-03-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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:

Código Delphi [-]
conecta.cheqdet.Recordset := tabla.Recordset;

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.
Responder Con Cita