Jump to content
Fivewin Brasil

"METER" 6 vezes mais lento


pauloaraujo

Recommended Posts

Amigos, preciso de ajuda.

Por favor digam que eu estou errado.

Estamos em fase de conversão para o FW26/clipper e fui substituir o famoso "Processando. Aguarde..." pelo "METER".

Tentei simular num DBF real do sistema, contendo 20000 rec e 10 indices (CDX) numa máquina 566 e constatei que a indexação ficou mais lenta 6 vezes (45s antes contra 270s).

Testei num Pentium 4 com 100000 rec e deu a mesma proporção.

Ora, a nossa ideia era colocar o "METER" em todo processamento pesado e indexação.

Temos clientes de todo tipo, alguns com arquivos com mais de 300.000 lançamentos, aproximadamente 100 estações e muitas delas desatualizadas (pão-duros, né??. Não podemos piorar o desempenho em função do mais bonito.

Lá vai o Fonte:

ANTES: -----------------------------------------------------

MsgRun( "REINDEXANDO COMERCIAL. AGUARDE!!!....... ","", ;

{|oInd|IF(.NOT.INDSCCoInd) , WINDEXOU:=.F.,.T.)})

FUNC INDSCC

IF.NOT.FUSEX("1","CADCLIEN")

RETU.F.

ELSE

ERASE ICLIEN.CDX

ENDIF

INDEX ON CLIENCOD TAG 01 TO ICLIEN

INDEX ON TRANSCOD TAG 02 TO ICLIEN

INDEX ON VENDECOD TAG 03 TO ICLIEN

INDEX ON STR(REGIOCOD,3,0)+FANTASIA TAG 04 TO ICLIEN

INDEX ON BANCOCOD TAG 05 TO ICLIEN

INDEX ON CONDICOD TAG 06 TO ICLIEN

INDEX ON CLIENTE TAG 07 TO ICLIEN

INDEX ON CGC TAG 08 TO ICLIEN

INDEX ON CPF TAG 09 TO ICLIEN

INDEX ON FANTASIA TAG 10 TO ICLIEN

RETU .T.

DEPOIS------------------------------------------------------

MsgMeter( { | oMeter, oText, oDlg, lEnd | ;

IF(.NOT.INDSCC( oMeter, oText, oDlg, @lEnd ) , ;

WINDEXOU:=.F. ,.T. ) } , ;

"REINDEXANDO COMERCIAL ...........","Aguarde" )

FUNC INDSCC

IF.NOT.FUSEX("1","CADCLIEN")

RETU.F.

ELSE

ERASE ICLIEN.CDX

ENDIF

oMeter:nTotal = RecCount()

oMeter:ctext = "REINDEXANDO CLIENTES 01/10"

INDEX ON CLIENCOD TAG 01 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 02/10"

INDEX ON TRANSCOD TAG 02 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 03/10"

INDEX ON VENDECOD TAG 03 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 04/10"

INDEX ON STR(REGIOCOD,3,0)+FANTASIA TAG 04 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 05/10"

INDEX ON BANCOCOD TAG 05 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 06/10"

INDEX ON CONDICOD TAG 06 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 07/10"

INDEX ON CLIENTE TAG 07 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 08/10"

INDEX ON CGC TAG 08 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 09/10"

INDEX ON CPF TAG 09 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

oMeter:ctext = "REINDEXANDO CLIENTES 10/10"

INDEX ON FANTASIA TAG 10 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd )

RETU .T.

Paulo/CONTATO SISTEMAS FW26/Clipper53b/BLINKER7

contato@pleno.com.br

Link to comment
Share on other sites

Olá Paulo,

Tente isto:

FUNC INDSCC

local PASSO := (cAlias)->(OrdKeycount()) / 100

INDEX ON CLIENCOD TAG 01 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) ;

every PASSO for !deleted()

Eu uso o teste "for !deleted" para que o meu browse fique com uma linha branca e a outra verde claro. Note que a variável "PASSO" eu dividi por 100 pois corresponde a 100%. Com isto voce irá ganhar tempo na indexação...

Use este esquema em todos os comando "INDEX"...

Abraços,

Rossine.

Rossine

FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.5 + @say + xHarbour Comercial

Link to comment
Share on other sites

  • 7 months later...

Olá amigos,

Sei que a dúvida deve ser banal ... mas o que signicaria o:

! lEnd

abaixo ?

No momento da execução o programa está parando com a msg:

Varible does not exist:LEND

Obrigado !

Zima

INDEX ON CLIENCOD TAG 01 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) ;

Link to comment
Share on other sites

Zima,

Eu uso assim, sem erros:

PRIV LEND

MsgMeter( { | oMeter, oText, oDlg, lEnd | ;

IF(.NOT.INDSCC( oMeter, oText, oDlg, @lEnd ) , ;

WINDEXOU:=.F. ,.T. ) } , ;

"REINDEXANDO COMERCIAL ...........","Aguarde" )

FUNC INDSCC

IF.NOT.FUSEX("1","CADCLIEN")

RETU.F.

ELSE

ERASE ICLIEN.CDX

ENDIF

oMeter:nTotal = RecCount()

oMeter:ctext = "REINDEXANDO CLIENTES 01/10"

INDEX ON CLIENCOD TAG 01 TO ICLIEN ;

EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 02/10"

.............

Paulo Araújo

Clipper53b/FW26/Blinker70

Ajudar é um prazer, agradecer é uma obrigação

Link to comment
Share on other sites

lEnd, já esta definido na classe MSGMETER.PRG em: fw..\source\classes

copie-o para o seu diretorio de trabalho, abra-o, modifique a gosto, depois incorpore ao seu RMK e LNK.

É absolutamente desnecessário declarara-lo como PRIVATE ou PUBLIC, já que ele já existe na classe... ???????????

O link para download do projeto xDev é este:

http://www.sqllib.com.br/xDev.zip

http://www.sqlmanager.net/en/products/mysql/manager/download

João Santos - São Paulo.

kmt_karinha@pop.com.br

FW 2.3C CLIP 5.3B FWH 2.7 - BLINKER 7.0 WorkShop.Exe

Link to comment
Share on other sites

Oi Paulo

O meter ou progress sempre serão mais lentos do que quando usávamos em DOS um esquema de mensagem.

Pelos testes que fiz o progress é bem superior ao meter quando se trata de velocidade.

O ideal é só colocarmos um meter ou progress quando realmente for necessário pois acaba sempre dando bastante comunicação entre o servidor e a estação para atualizar os percentuais, gerando toda a demora de processamento.

José Carlos

Guarulhos-SP

FW 2.0 / Clipper 5.2e / WS | FWH 2.5 / xHarbour / xMate / Pelles

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...