Page 1 of 1

Memory Leak - Richedit

Posted: Wed Feb 24, 2021 10:07 pm
by hmpaquito
Hola,

Estaba probando este ejecutable https://github.com/FiveTechSoft/FWH_too ... er/pim.zip y veo que si en el control de edicion que creo que es un richedit, pego una imagen hay una fuga de memoria.
Realmente para mi no tiene demasiada importancia. Pero por si fuera de interés para alguien

Saludos

Re: Memory Leak - Richedit

Posted: Wed Feb 24, 2021 10:55 pm
by cnavarro
Cómo has detectado la fuga que comentas?
Lo digo para usar los mismos criterios y herramientas

Re: Memory Leak - Richedit

Posted: Thu Feb 25, 2021 8:00 am
by hmpaquito
Hola Cristóbal,

Con el administrador de tareas, en la columna de objetos GDI

Salu2

Re: Memory Leak - Richedit

Posted: Thu Feb 25, 2021 8:44 am
by cnavarro
Muy buenas señor
Lo imaginaba pero quería asegurarme
Gracias

Re: Memory Leak - Richedit

Posted: Thu Feb 25, 2021 10:16 am
by hmpaquito
Nunca he usado el valgrind. No sé como se utilizaria.

El Process Explorer no aporta mucho en el tema GDI (o eso creo)
El Task Manager de luxe tampoco... Quizá las versiones más modernas.. no sé..

¿ Utilizas tu algún inspector para detectar las fugas de memoria ?

Re: Memory Leak - Richedit

Posted: Thu Feb 25, 2021 11:59 am
by Antonio Linares
Paco,

Has probado a usar el propio detector de pérdida de recursos que incorpora FWH ?

http://wiki.fivetechsoft.com/doku.php?i ... etresdebug

Re: Memory Leak - Richedit

Posted: Thu Feb 25, 2021 12:26 pm
by hmpaquito
Hola Antonio,

No lo he probado... pero sospecho que para el caso del enunciado no serviria...
Los objetos richedit si son eliminados pero no los recursos que consumieron con las imagenes....
Pero ciertamente no sé bien qué está pasando... Pero ciertamente el ejemplo si tiene una fuga por la cañería :D y es más grande cuanto más grande es la imagen que se le pega

Salu2

Re: Memory Leak - Richedit

Posted: Fri Feb 26, 2021 11:14 am
by Antonio Linares
Paco,

El propio sistema de FWH también debería detectar la no liberación de esas imágenes y reportarlas

Te ruego que lo pruebes usándo esas funciones propias de FWH y nos comentes el resultado

Gracias

Re: Memory Leak - Richedit

Posted: Fri Feb 26, 2021 12:16 pm
by csincuir
Antonio, he hecho la SetResDebug() en una aplicación que desarrolle para un cliente donde incorporo unas imágenes y las mismas las pueden modificar y luego guardarlas en una tabla de MySQL
Como desconozco como interpretar los resultados de SetResDebug(), copio el mismo acá para que me puedas indicar si estoy teniendo problemas con la liberación de estas imágenes:

Code: Select all

26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BRUSH,-1139798402,TCONTROL:SETCOLOR(2770)->TBTNBMP:SETCOLOR(2084)->TBTNBMP:NEWBAR(579)->FUNSISMAIN:ACTIVAR(1224)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1040519000,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,402984832,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-804974665,TXIMAGE:COPYTOCLIPBOARD(914)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,151326670,TIMAGE:LOADFROMCLIPBOARD(445)->GUARDARGRAFICACLINICA(9575)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1174736808,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,1761939236,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1459286073,TXIMAGE:COPYTOCLIPBOARD(914)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,755306396,TIMAGE:LOADFROMCLIPBOARD(445)->GUARDARGRAFICACLINICA(9575)->(b)HOJAGRAFICA(9530)->(b)TWINDOW(726)->TWINDOW:LVALID(0)->(b)TWINDOW(366)->TWINDOW:END(0)->TWINDOW:SYSCOMMAND(2610)->TWINDOW:HANDLEEVENT(0)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->BITACORAMEDICA(9023)->(b)FICHACLINICA(8809)->TBUTTON:CLICK(179)->TBUTTON:HANDLEEVENT(1755)->_FWH(3559)->SENDMESSAGE(0)->TDIALOG:COMMAND(433)->TWINDOW:HANDLEEVENT(0)->TDIALOG:HANDLEEVENT(1136)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->FICHACLINICA(8817)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1291514171,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8630)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BMP,-1912270878,TBITMAP:LOADIMAGE(826)->TBITMAP:DEFINE(282)->FICHACLINICA(8631)->(b)CLIE01(981)->TBTNBMP:CLICK(704)->TBTNBMP:LBUTTONUP(990)->TCONTROL:HANDLEEVENT(1791)->TBTNBMP:HANDLEEVENT(2030)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->CLIE01(1339)->(b)CLIECONS(4624)->TWINDOW:LDBLCLICK(2092)->TCONTROL:LDBLCLICK(1814)->TWBROWSE:LDBLCLICK(1229)->TWINDOW:HANDLEEVENT(0)->TWBROWSE:HANDLEEVENT(1801)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- BRUSH,-2096099950,AYUDACINV(5229)->(b)REPINVEN01(84)->TWINDOW:LBUTTONDOWN(2067)->TBITMAP:LBUTTONDOWN(607)->TCONTROL:HANDLEEVENT(1788)->TBITMAP:HANDLEEVENT(577)->_FWH(3559)->DIALOGBOX(0)->TDIALOG:ACTIVATE(304)->REPINVEN01(362)->(b)MENUMAIN(3181)->TMENU:COMMAND(1552)->TWINDOW:COMMAND(1141)->TMDIFRAME:COMMAND(272)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3559)->WINRUN(0)->TMDIFRAME:ACTIVATE(1097)->FUNSISMAIN:ACTIVAR(1471)->MAIN(102)
26-02-2021 06:05:06: C:\appsis\dev\sisgen.exe -- ==================================================================================================== 
* Corte el contenido porque tiene mas líneas.

Si estoy teniendo problemas con liberación de estas imágenes de la memoria, como se corrige el problema?

Saludos cordiales

Carlos

Re: Memory Leak - Richedit

Posted: Fri Feb 26, 2021 12:49 pm
by Antonio Linares
Carlos,

Hay 10 bitmaps no liberados. Busca por "BMP," y verás desde donde se ha creado cada uno de ellos

Que control contiene a esos bitmaps ? es una barra de botones ? Puedes mostrar una imagen ?

Re: Memory Leak - Richedit

Posted: Fri Feb 26, 2021 2:56 pm
by csincuir
Antonio, gracias por responder.
Estoy utilizando un control xImage en una ventana:

Code: Select all

@ oWnd:oBar:nHeight, 250 XIMAGE oImage SIZE oWnd:nWidth -30, -oWnd:oMsgBar:nHeight
 
Image

Luego, según las modificaciones que hagan a la imagen, la copio al portatapeles -> oImage:CopyToClipBoard( .T. )
Par luego guardarla a disco:

Code: Select all

oImage2:LoadFromClipboard()
oImage2:SaveImage( cImage, 2, 100 )
Creo que el problema esta en que las estoy guardando al portapapeles?

Saludos cordiales

Carlos

Re: Memory Leak - Richedit

Posted: Sat Feb 27, 2021 11:46 am
by nageswaragunupudi
I think this is what you are doing:
oImage is TXImage control.
You are copying the image as viewed from oImage to Clipboard.
Paste the image to oImage2, which is a TImage control.
Then saving the image using oImage2:SaveImage(...)

All this is not necessary.
We do not require the second TImage control oImage2 and also we need not use Clipboard at all.

When you want to save, just call

Code: Select all

oImage:Save( .t., "name.png" )
 
Note: Last parameter nQuality is required only for jpg files.

Is there any problem saving this way?

Re: Memory Leak - Richedit

Posted: Sat Feb 27, 2021 9:07 pm
by csincuir
Hola Rao, gracias por contestarme.
Si, yo ya había utilizado la opción que me indicas del control xImage:

Code: Select all

oImage:Save( .t., cImage )
Pero no funciona, no guarda la imagen.
Solo me funciona, copiando al portapales y utilizar el control Image, para guardar la imagen.

Saludos cordiales.

Carlos.

Re: Memory Leak - Richedit

Posted: Sun Feb 28, 2021 4:13 am
by nageswaragunupudi
1) Please try and let us know if this works.

Code: Select all

oImage:CopyToClipBoard( .t. )
FW_SaveImage( nil, cFileName )
 
2) We would like to check again why oImage:Save( .t., cImage ) is not working.

3) I very much liked your program. If you do not mind sharing your full program with me, I would like to test and improve TXImage class to save the changes properly.
My email is:
nageswaragunupudi [at] gmail [dot] com.

Thank you.

Re: Memory Leak - Richedit

Posted: Tue Mar 02, 2021 5:25 pm
by csincuir
Hola Rao.
Disculpándome por el atraso en contestar, tuve que salir de viaje.
Te contesto a cada punto que me escribieras:

1) No funciona la opción FW_SaveImage( nil, cFileName ), no guarda la imagen.

2) Gracias por el apoyo.

3) Ya te envié por correo el programa para que puedas ver como lo estoy haciendo actualmente. (Si alguien mas quiere tener este programa que me envíe su correo y se lo envío. ) ** NOTA: Este trabajo de dibujar sobre una imagen es idea de Uwe, yo solo lo adapte.

Saludos cordiales.

Carlos.