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: -----------------------------------------------------
Código: Selecionar todos
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.
Código: Selecionar todos
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.
**********************************************
{}
Cardim
www.cardim.com.br

