Memory Leak - Richedit

Post Reply
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Memory Leak - Richedit

Post 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
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Memory Leak - Richedit

Post by cnavarro »

Cómo has detectado la fuga que comentas?
Lo digo para usar los mismos criterios y herramientas
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Memory Leak - Richedit

Post by hmpaquito »

Hola Cristóbal,

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

Salu2
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Memory Leak - Richedit

Post by cnavarro »

Muy buenas señor
Lo imaginaba pero quería asegurarme
Gracias
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Memory Leak - Richedit

Post 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 ?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memory Leak - Richedit

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Memory Leak - Richedit

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memory Leak - Richedit

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Memory Leak - Richedit

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Memory Leak - Richedit

Post 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 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Memory Leak - Richedit

Post 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
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Memory Leak - Richedit

Post 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?
Regards

G. N. Rao.
Hyderabad, India
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Memory Leak - Richedit

Post 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.
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Memory Leak - Richedit

Post 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.
Regards

G. N. Rao.
Hyderabad, India
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Memory Leak - Richedit

Post 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.
Post Reply