FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC Problema grave de velocidad
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 09:24 AM

Antonio,

Ya está probado y el resultado es el mismo.

Con entar una vez en el diálogo da estos valores:

Entra Mem usada: 53% T.Física libre: 14872.00 kb
Sale Mem usada: 54% T.Física libre: 14348.00 kb

Y si entramos 5 veces:

Sale Mem usada: 58% T.Física libre: 13380.00 kb

Como ves la pérdida de memoria en 5 veces que entre es 1492 Kb

Luego trabajando va recuperando algo, pero al final se queda sin memoria.

¿Que puedo mirar para ver que recursos se quedan en memoria ?

Un Saludo,
Joaquín

Un Saludo,

Joaquín Martínez
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 11:42 AM

Joaquín,

Prueba a hacer un diálogo sin ningún control en él y entra y sal y comprueba la memoria. Luego ve añadiéndole más controles tuyos, hasta que encontremos lo que pueda estar ocurriéndole.

hb_gcAll() debe restaurar la memoria al valor anterior de llamar al diálogo.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 04:22 PM

Antonio,

Un Diálogo con controles fwppc, 1 combo, 1 checkbox, 1 browse , 2 Botones, 1 TBtnBmp

Y pierde bastante al entrar y luego sólo recupera algo, aunque luego puedes volver a entrar y salir y algunas veces baja unos bytes.

Pero, lo que no entiendo es como trabaja windows con la memoria, si tiene memoria disponible bastante empieza a usarla sin recuperar nada y de vez en cuando parece que recupera lo que le parece.

¿Es algo parecido a esto? Porque si es así, puede que la función del api globalmemory no sea totalmente real en el instante.

Un Saludo,
Joaquín

Un Saludo,

Joaquín Martínez
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 04:31 PM

Joaquín,

Puede ser así, como dices, similar a como funciona Clipper. Usa memoria virtual y no la libera, hasta que cada cierto tiempo hace limpieza y la recupera.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 06:05 PM

Antonio,

He seguido con las pruebas , entrando y saliendo en diálogos y llega al 100% de memoria gastada física, se pone lentísima y hasta se termina colgando cuando se le acaba la memoria virtual.

Un Saludo,
Joaquín

Un Saludo,

Joaquín Martínez
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Problema grave de velocidad
Posted: Tue Sep 12, 2006 11:28 PM

Joaquín,

Si comentas los REDEFINEs de los controles en el diálogo y dejas solo el diálogo no hay pérdida alguna de memoria. Luego quiere decir que algún control está gastando algo de memoria. Estamos revisándolo.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 47
Joined: Mon May 29, 2006 09:04 PM
Problema grave de velocidad
Posted: Wed Sep 13, 2006 10:28 PM
que tal amigos, q tal don antonio.. he seguido el hilo y a mi tambien me paso algo parecido, cuando queria matar un control para pasar a otro dialogo, o simplemente para poner otro en lugar del anterior, la aplicacion se ponia algo lenta.. luego me di cuenta q el arreglo aControls crecia sin parar cada vez que hacia una nueva llamada, esto lo pude subsanar, llamando al metodo Hide() en vez de End() y condicionando la ejecucion, si necesitaba llamar de nuevo a un control determinado, preguntaba si ya existia y le hacia un Show(), aparte de eso no asigno variables a los controles, por ejemplo

[code]
/////////////////////////////
// PRUEBA PARA FORO FWPPC
// Luis Santeliz - 12/06/2006
// luissanteliz@cantv.net
//

#include "fwce.ch"
#include "colors.ch"
#include "winapi.ch"

FUNCTION Main()
LOCAL aPict, aCampos

PUBLIC _oWnd, oContenedor, oFnt

#DEFINE data curdir()+"\data"
#DEFINE bitmaps curdir()+"\bitmaps"

DEFINE FONT oFnt NAME "Arial" SIZE 0,12
DEFINE FONT oFnt2 NAME "Arial" SIZE 0,12 BOLD

DEFINE WINDOW _oWND TITLE "Prueba Foro FWPPC"

USE (data+"\clientes.dbf") ALIAS "CLI" INDEX (data+"\clientes") NEW

DEFINE DIALOG oContenedor OF _oWND STYLE nor(WS_CHILD, WS_BORDER) ;
FROM 296, 2 TO 317, 200 PIXEL

ACTIVATE DIALOG oContenedor NOWAIT


#DEFINE oBrw _oWnd:aControls[1]

aPicture:={NIL,"999.99"}
aCampos:={"CLI_NOMBRE","CLI_DESCUE"}

@ 1,1 LISTBOX FIELDS (ContenedorSay(CLI->CLI_CODIGO), OemToAnsi(LEFT(CLI->CLI_NOMBRE,30))), TRANSFORM(CLI->CLI_DESCUE,aPicture[2]) ALIAS "CLI" ;
HEAD "Nombre","Desc" SIZE 240,200 PIXEL OF _oWnd ;
ON CLICK (EditCelda(oBrw,aPicture,aCampos)) ;
FONT oFnt

oBrw:lCellStyle:=.t. // por celda
oBrw:aJustify:={.f.,.t.} // Justifica el texto a la derecha o ala izquierda de cada campo


ACTIVATE WINDOW _oWND
RETURN (.T.)

////////////////////////
// Editar celda
// oxBrw : objeto TWBrowse
// aPict : arreglo con el PICTURE del get, si es NIL no hara el get, si es un codeblock se evaluara, pero aceptara solo valores caracter o NIL
// aCampos : arreglo con los nombres de los campos del alias del browse
//


FUNCTION EditCelda(oxBrw,aPict,aCampos)

#DEFINE nColActual oxBrw:nColAct
#DEFINE nLargo oxBrw:aColSizes[nColActual]
#DEFINE cPict IIF( ValType(aPict[nColActual])="B", Eval(aPict[nColActual]) , aPict[nColActual] )
#DEFINE cSay rtrim(oxBrw:aHeaders[nColActual])
#DEFINE nPosCampo FieldPos(aCampos[nColActual])
#DEFINE nAncho 15

LOCAL uVar:=NIL

// #DEFINE oCantidad oFld:aDialogs[2]
#DEFINE oContenedorSay oContenedor:aControls[1]
#DEFINE oContenedorGet oContenedor:aControls[2]
#DEFINE oContenedorBtnBmp1 oContenedor:aControls[3]
#DEFINE oContenedorBtnBmp2 oContenedor:aControls[4]

IF cPict=NIL
ContenedorSay("No se puede editar.")
RETURN NIL
ENDIF
uVar:=FieldGet(nPosCampo)

oContenedor:EraseBkGnd( oContenedor:GetDC() )
oContenedor:ReleaseDC()
//
// AQUI ES DONDE HAGO LA LLAMADA AL PROCEDIMIENTO Show()
//


IF Len(oContenedor:aControls)>2
oContenedorGet:cText(uVar)
oContenedorGet:Refresh()
oContenedorGet:SetFocus()
// AEval(oContenedor:aControls,{|a,i| a:Show()},3)
oContenedorGet:Show()
oContenedorSay:Show()
oContenedorBtnBmp1:Show()
oContenedorBtnBmp2:Show()
RETURN uVar
ENDIF

//
// Panel para la presentacion del get que obtiene la cantidad luego de seleccionar el articulo para el documento
//

@ 1, 0 SAY cSay+":" SIZE (len(cSay)*6)+1, nAncho PIXEL FONT oFNT2 DIALOG oContenedor

@ oContenedorSay:nTop, oContenedorSay:nRight+1 GET uVar SIZE (len(cPict)*6), nAncho PIXEL PICTURE cPict FONT oFnt RIGHT DIALOG oContenedor

@ oContenedorSay:nTop-2,oContenedorGet:nRight+2 BTNBMP FILE bitmaps+"\si16x16.bmp", bitmaps+"\si16x16_.bmp" ;
SIZE 18,18 PIXEL ACTION (oxBrw:cAlias)->(FieldPut(nPosCampo,uVar)),oContenedorBtnBmp2:Hide(),oContenedorBtnBmp1:Hide() DIALOG oContenedor

@ oContenedorSay:nTop-2,oContenedorBtnBmp1:nRight+1 BTNBMP FILE bitmaps+"\no16x16.bmp", bitmaps+"\no16x16_.bmp" ;
SIZE 18,18 PIXEL ACTION oContenedorBtnBmp1:Hide(),oContenedorBtnBmp2:Hide() DIALOG oContenedor

oContenedorGet:bGotFocus :={||ShowKeyboard() }
oContenedorGet:bLostFocus:={||HideKeyboard(),oContenedorSay:Hide(),oContenedorGet:Hide(), oxBrw:Refresh() }
oContenedorGet:SetFocus()


// EraseBkGnd( hDC )
RETURN

/////////////////////////
// Pinta un mensaje en el contenedor, (y literalmente pinta)
//

FUNCTION ContenedorSay(cMsg)
oContenedor:EraseBkGnd( oContenedor:GetDC() )
oContenedor:ReleaseDC()
oContenedor:Say(1,2,cMsg,CLR_BLACK,CLR_WHITE,oFnt,.T.)
RETURN .T.

/////////////////////////////////////
// convierte texto de msdos en ansi
//
function OemToAnsi( cText )

local cOem := "¤¥‚¡¢£
Luis Santeliz
Móvil SoftWare, C.A.
---------------------------------------------
MySQL DBA,
MySQL Server Performance Tunning,
DPxBase, FiveWin, Java,
Linux Redhat, Windows

Caracas Venezuela
luissanteliz@cantv.net
Posts: 47
Joined: Mon May 29, 2006 09:04 PM
Problema grave de velocidad
Posted: Wed Sep 13, 2006 10:32 PM

ah una cosa mas...
el codigo completo esta en www.alvajos.com/pruebita.zip

Luis Santeliz
Móvil SoftWare, C.A.
---------------------------------------------
MySQL DBA,
MySQL Server Performance Tunning,
DPxBase, FiveWin, Java,
Linux Redhat, Windows

Caracas Venezuela
luissanteliz@cantv.net
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Problema grave de velocidad
Posted: Thu Sep 14, 2006 05:31 AM

Luis,

Estás usando un diálogo no modal, luego si no lo destruyes, cada vez que llamabas a EditCelda() crece aControls, es normal. Tienes que destruirlo con :End() y volver a crearlo de nuevo.

Tu sistema lo que hace es reutilizarlo :-)

El problema que describe Joaquín es diferente y ya está practicamente arreglado.

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion