Problema grave de velocidad

Postby jmartial » Tue Sep 12, 2006 9: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

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

Postby jmartial » Tue Sep 12, 2006 4: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Tue Sep 12, 2006 4: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42079
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Tue Sep 12, 2006 6: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

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

Postby luis.santeliz » 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
User avatar
luis.santeliz
 
Posts: 47
Joined: Mon May 29, 2006 9:04 pm

Postby luis.santeliz » 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
User avatar
luis.santeliz
 
Posts: 47
Joined: Mon May 29, 2006 9:04 pm

Postby Antonio Linares » Thu Sep 14, 2006 5: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42079
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Previous

Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 29 guests