Ir al contenido



Foto

TMemo: rendimiento


  • Por favor identifícate para responder
5 respuestas en este tema

#1 Gronfi

Gronfi

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 05 marzo 2018 - 09:38

Hola,

utilizo el tmemo bastante para ir viendo logs de manera visual, según la aplicación va generando se van viendo ahí. El uso es simple, se van agregando en modo texto.

Esto se hace a través de un thread que va recogiendo los logs (un poco más complejo pero para resumir) y va agregándolos sincronizándose con el thread principal (a través del tthread.queue) para que no haya problemas.

Lo que veo es que en comparación con el tmemo de la vcl, consume más CPU, por estar cada poco añadiendo logs.

Os conocéis de algún truquete para mejorar el rendimiento de añadir líneas al tmemo? (para que consuma menos cpu vamos)

Saludos


  • 0

#2 Gronfi

Gronfi

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 05 marzo 2018 - 09:55

Una cosa que intenté y me sorprendió saliese el tiro por la culata fue cambiarle la propiedad 'controltype' de 'styled' a 'platform', pensando que iría más optimizado en la plataforma donde ejecutas...y va bastante más lento.

Otras cosas que he intentado:

  • almacenar los logs de 'x' segundos y cada 'x' segundos pasárselos todos al memo: origina un pico terrible si se han generado muchos logs
  • lógicamente usar el 'beginupdate' y 'endupdate' y entre medias añadir al memo lo que fuere
  • tratar de repartir en el tiempo la escritura de los logs al memo de manera más 'repartida'. Bien si no hay muchos logs, pero si hay unos cuantos, no hay manera de que la CPU baje del 3-5 % y viendo con el proccess explorer que thread de la aplicación se come la cpu, se ve que es el principal (paro los logs y baja a 0...no es casual :) )

  • 0

#3 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 829 mensajes
  • LocationArgentina

Escrito 06 marzo 2018 - 12:38

Sobre que plataforma? Firemonkey es mas pesado y lento que la Vcl, aunque en Windows no deberia haber gran diferencia

 

No sera problema de que son muchas Lineas y no por la sincronizacion?

 

De todos modos, no es mejor guardar los log en un archivo?

 

Por otra parte, entre 3%-5% de uso de CPU te parece mucho??


  • 0

#4 Gronfi

Gronfi

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 06 marzo 2018 - 02:52

Hola!

Sobre Windows. Las pruebas las hago en un windows 7 aunque luego corren en un servidor.

Si, como comentas los logs también los bajamos a ficheros, y a su vez en la aplicación tenemos un visor (básico como he comentado, sin florituras). Tiramos a que el primer vistazo sea en pantalla siempre.

El tema del 3-5% es bastante, porque igual tenemos lanzados 50 procesos similares en un servidor. No todos generan muchos logs, pero hay algunas aplicaciones que por su tipología de trabajo si generan bastante log, sin ser una barbaridad.

Una opción que estoy barajando es en vez de utilizar un memo, utilizar un grid, de manera que a priori el refresco solo se ejecutará para los datos de pantalla (por el tema de que ahora son grids virtuales, creo que se denomina así el concepto), y no será algo constante que esté comiendo la cpu sin demasiada necesidad.

Las aplicaciones antes eran de la VCL, y no comían cpu de manera tan notable como ahora.


  • 0

#5 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 829 mensajes
  • LocationArgentina

Escrito 06 marzo 2018 - 09:34

Te iba a comentar la idea de usar un control en modo virtual para no mostrar tantos datos. Mucho mas no se me ocurre


  • 0

#6 Gronfi

Gronfi

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 06 marzo 2018 - 12:47

Hola!

Ando en ello. Las primeras pruebas prometen.

Ya os comento comparativas cuando termine con el tema


  • 0