Geraldo (gbsilva) Posted December 4, 2005 Report Share Posted December 4, 2005 Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada Ãndice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo. As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia. Obrigado a todos. Function Indexa() LOCAL bAction, xTotalRegs := 0 IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção") return(nil) ENDIF Indexaa(@xTotalRegs) //bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) } bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) } MsgMeter(bAction,"Preparando...","Reorganização da base de dados") Return Nil Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs) oMeter:nTotal := xTotalRegs oText:SetText("Indexando Arquivos!") FERASE("BdOts.CDX") GbDbf("BdOts","E",.F.) BdOts->(__DbPack()) Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh()) //Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh()) BdOts->(DbCloseArea()) FERASE("BdAux.CDX") GbDbf("BdAux","E",.F.) BdAux->(__DbPack()) Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh()) BdAux->(DbCloseArea()) return STATIC function Indexaa(xTotalRegs) local xRegs := 0 ContaRegs("BdOts",@xRegs,8) xTotalRegs += xRegs ContaRegs("BdAux",@xRegs,3) xTotalRegs += xRegs return(.t.) STATIC function ContaRegs(xArquivo,xRegs,xIndices) GbDbf(xArquivo,"E",.F.) &xArquivo->(DbGoBottom() ) xRegs := &xArquivo->(Lastrec() ) * xIndices &xArquivo->(DbCloseArea() ) return(.t.) Geraldo Barbosa da Silva FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5 FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake Windows Xp SP2 lucgera@terra.com.br Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted December 4, 2005 Author Report Share Posted December 4, 2005 Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada Ãndice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo. As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia. Obrigado a todos. Function Indexa() LOCAL bAction, xTotalRegs := 0 IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção") return(nil) ENDIF Indexaa(@xTotalRegs) //bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) } bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) } MsgMeter(bAction,"Preparando...","Reorganização da base de dados") Return Nil Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs) oMeter:nTotal := xTotalRegs oText:SetText("Indexando Arquivos!") FERASE("BdOts.CDX") GbDbf("BdOts","E",.F.) BdOts->(__DbPack()) Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh()) //Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh()) BdOts->(DbCloseArea()) FERASE("BdAux.CDX") GbDbf("BdAux","E",.F.) BdAux->(__DbPack()) Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh()) BdAux->(DbCloseArea()) return STATIC function Indexaa(xTotalRegs) local xRegs := 0 ContaRegs("BdOts",@xRegs,8) xTotalRegs += xRegs ContaRegs("BdAux",@xRegs,3) xTotalRegs += xRegs return(.t.) STATIC function ContaRegs(xArquivo,xRegs,xIndices) GbDbf(xArquivo,"E",.F.) &xArquivo->(DbGoBottom() ) xRegs := &xArquivo->(Lastrec() ) * xIndices &xArquivo->(DbCloseArea() ) return(.t.) Geraldo Barbosa da Silva FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5 FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake Windows Xp SP2 lucgera@terra.com.br Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted December 4, 2005 Author Report Share Posted December 4, 2005 Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada Ãndice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo. As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia. Obrigado a todos. Function Indexa() LOCAL bAction, xTotalRegs := 0 IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção") return(nil) ENDIF Indexaa(@xTotalRegs) //bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) } bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) } MsgMeter(bAction,"Preparando...","Reorganização da base de dados") Return Nil Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs) oMeter:nTotal := xTotalRegs oText:SetText("Indexando Arquivos!") FERASE("BdOts.CDX") GbDbf("BdOts","E",.F.) BdOts->(__DbPack()) Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh()) //Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh()) Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh()) BdOts->(DbCloseArea()) FERASE("BdAux.CDX") GbDbf("BdAux","E",.F.) BdAux->(__DbPack()) Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh()) BdAux->(DbCloseArea()) return STATIC function Indexaa(xTotalRegs) local xRegs := 0 ContaRegs("BdOts",@xRegs,8) xTotalRegs += xRegs ContaRegs("BdAux",@xRegs,3) xTotalRegs += xRegs return(.t.) STATIC function ContaRegs(xArquivo,xRegs,xIndices) GbDbf(xArquivo,"E",.F.) &xArquivo->(DbGoBottom() ) xRegs := &xArquivo->(Lastrec() ) * xIndices &xArquivo->(DbCloseArea() ) return(.t.) Geraldo Barbosa da Silva FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5 FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake Windows Xp SP2 lucgera@terra.com.br Quote Link to comment Share on other sites More sharing options...
pauloaraujo Posted December 4, 2005 Report Share Posted December 4, 2005 Geraldo, tudo bem?? Recentemente alguém postou alguma dica sobre o METER unificar todos os TAGs do CDX. Pesquisei e não encontrei. Também estou precisando. Um abraço Paulo Araújo Clipper53b/FW26/Blinker70 Ajudar é um prazer, agradecer é uma obrigação Quote Link to comment Share on other sites More sharing options...
evandro Posted December 5, 2005 Report Share Posted December 5, 2005 Olá, Eu não gostei de gerar os Ãndices com meter. O tempo de indexação aumentou muuuuuuuuuuuuuuuuuuuuito. []s, Evandro G. de Paula Curvelo - MG evandro@skillnet.com.br (Escr. - na Cidade) imortal@skillnet.com.br (Res. - na Roça) FWH 2.5+PellesC+xBuild+xHarbour.org 0.99.3 PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005 Quote Link to comment Share on other sites More sharing options...
aferra Posted December 5, 2005 Report Share Posted December 5, 2005 Bom dia! eu faço desta forma, e realmente demora, mais nunca ninguém reclamou, bem vai lá: FUNCTION CriaCdx() PRIVATE qTotDbf:=DIRECTORY("DADOS\*.DBF","D") PRIVATE qTotCdx:=DIRECTORY("DADOS\*.CDX","D") PRIVATE ntotDbf:=0,nTotCdx:=0 PRIVATE oTxt1:=cTxt1:=oTxt2:=cTxt2:="Quero Testar esta função de indexação" //deleta todos os cdx AEVAL(DIRECTORY("DADOS\*.cdx"),{|aFile| FErase("DADOS\"+aFile[1])}) qTotDbf:=qTotCdx:=LEN(qTotDbf)-1 @ 25.3,38.1 SAY oTxt1 VAR cTxt1 SIZE 420,16 OF oWSig COLOR nRgb(0,0,0),nRgb(238,221,187) @ 25.0,38.1 METER oMetDbf VAR nTotDbf TOTAL qTotDbf SIZE 420,20 BARCOLOR nRgb(0,0,255),nRgb(255,255,255) OF oWSig @ 29.5,38.1 SAY oTxt2 VAR cTxt2 SIZE 420,16 OF oWSig COLOR nRgb(0,0,0),nRgb(238,221,187) @ 29.0,38.1 METER oMetCdx VAR nTotCdx TOTAL qTotCdx SIZE 420,20 BARCOLOR nRgb(0,0,255),nRgb(255,255,255) OF oWSig ScrolMeter() (oTxt1:END(),oMetDbf:END(),oTxt2:END(),oMetCdx:END()) RETURN(NIL) STATIC FUNCTION ScrolMeter() LOCAL indexao:=0 while .T. oMetDbf:Set(indexa) IF indexa==1 oTxt1:SetText("Arquivo de Agenda / Calendário") IF cDbf ; USE DADOS\arqagc NEW ; END oMetCdx:nTotal:=RecCount() oTxt2:SetText("Indexando o Arquivo Por Data") INDEX ON DTOS(data)+user+hora TAG data EVAL (oMetCdx:Set(RecNo()),SysRefresh()) INDEX ON DTOS(data)+user+hora TAG datl FOR !lido EVAL (oMetCdx:Set(RecNo()),SysRefresh()) ELSEIF indexa = 2 oTxt1:SetText("Arquivo de Informações do Sistema") IF cDbf ; USE DADOS\arqimp NEW ; END oMetCdx:nTotal:=RecCount() oTxt2:SetText("Indexando o Arquivo Por Situações") INDEX ON estacao TAG estacao EVAL (oMetCdx:Set(RecNo()),SysRefresh()) END FreeResources() IF indexa <= qTotDbf ; indexa++ ELSE ; EXIT END END RETURN(NIL) pode haver algum erro, pois fui tirando algumas configurações do meu prg, qqc é só gritar Abraços Alessandro F. Silva - Ribeirão Preto/SP aferracini@terra.com.br FW2.0d + CL53b + Blinker 7.0 + @Say @Get MSN: ferracini_silva@hotmail.com Quote Link to comment Share on other sites More sharing options...
pauloaraujo Posted December 5, 2005 Report Share Posted December 5, 2005 citação:Olá, Eu não gostei de gerar os Ãndices com meter. O tempo de indexação aumentou muuuuuuuuuuuuuuuuuuuuito. []s, Evandro G. de Paula Curvelo - MG evandro@skillnet.com.br (Escr. - na Cidade) imortal@skillnet.com.br (Res. - na Roça) FWH 2.5+PellesC+xBuild+xHarbour.org 0.99.3 PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005 id=quote>id=quote>Evandro, tudo bem??? No inÃcio fiz um teste e realmente ficou 10 vezes mais lento. Acho que foi o Rossine que me ajudou: WPASSO:=RecCount()/100 INDEX ON ... EVAL .... EVERY WPASSO Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro. Um abraço Paulo Araújo Clipper53b/FW26/Blinker70 Ajudar é um prazer, agradecer é uma obrigação Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted December 5, 2005 Author Report Share Posted December 5, 2005 Então pessoal o caso é esse, não precisa ser o Meter mas até usando o Pelles dá, pois o que acho que fica legal é total de registros x números de indices a cada DBF e totalizar tudo e montar algo que mostre a porcentagem por exemplo a cada 100/200/500 registros por exemplo. Ainda vou tentar mas sei que tem muito fera por ai que pode ajudar os calças brancas como eu. Obrigado. Geraldo Barbosa da Silva FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5 FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake Windows Xp SP2 lucgera@terra.com.br Quote Link to comment Share on other sites More sharing options...
elitenet Posted December 5, 2005 Report Share Posted December 5, 2005 Caro Geraldo Para fazer e facil, so nao lhe aconselho a fazer isso, pois em um sistema que tenha mais ou menos 40 aquivos vai ficar lento de mais da conta. Pois voce tera que abrir todos os arquivos somar os registros com Reccount(), e depois ir chamando a indexacao de um a um. Tentei fazer isso uma vez, mas meu sistema nao suportou, pois tenho mais ou menos 400 arquivos em meu sistema, e imagina abrir e fechar isso duas vezes na entrada do sistema somente para indexar. Marcelo Gomes elitenet@terra.com.br FW 2.3C/CLIPPER 5.2E/BLINKER 7.0 Quote Link to comment Share on other sites More sharing options...
Kbelo Posted December 5, 2005 Report Share Posted December 5, 2005 Bom eu coloco todos os meu dbfs(os nomes) em vetores separados por setor tipos notas produtos contas a pagar etc... e a medida que vai indexando mostra em um list box o que foi indexado um meter logo a baixo que inicia no primeiro e termina no ultimo mas eu fiz isso manualmente eu sei que no meu sistema tantos dbfs e fiz o numero de dbfs dividido por 100 e a cada dbf vai atualizando qto a demora tenho clientes que demora um minuto ja outro 2 ou tres horas um dia vai ficar demorado Marcelo Michels Alexandre Criciúma - SC Celo.michels@ibestvip.com.br marcelo@lorenzi.com.br Quote Link to comment Share on other sites More sharing options...
betovsp Posted December 7, 2005 Report Share Posted December 7, 2005 citação:Acho que foi o Rossine que me ajudou:WPASSO:=RecCount()/100 INDEX ON ... EVAL .... EVERY WPASSO Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro. id=quote>id=quote>Olá Paulo, Blz, isso realmente fez com que ficasse bem mais rápido, valew pela dica. Abraços. Beto betovsp@hotmail.com (16)9148-1515 CL53B + FW2.0 + @ SAY + BLINKER 7 Ribeirão Preto/SP Quote Link to comment Share on other sites More sharing options...
jef2_tim Posted December 7, 2005 Report Share Posted December 7, 2005 Eu sou mei lento citação:WPASSO:=RecCount()/100 INDEX ON ... EVAL .... EVERY WPASSO Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro. id=quote>id=quote>Nao entendi... tipo como eu adaptaria na minha rotina oMeter1:nTotal = RecCount() Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche; Eval ( oMeter1:Set( RecNo() ), SysRefresh() ) Eu nao quero juntar tudo.. quer fazer individual. sem problema iniciar.. agora esta ideia ae diz q deixa mais rapido.. como eu faço para adpatar nesta rotininha ae? valeu Um Xharbraço. Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar Quote Link to comment Share on other sites More sharing options...
pauloaraujo Posted December 7, 2005 Report Share Posted December 7, 2005 citação:Eu sou mei lento citação:WPASSO:=RecCount()/100 INDEX ON ... EVAL .... EVERY WPASSO Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro. id=quote>id=quote>Nao entendi... tipo como eu adaptaria na minha rotina oMeter1:nTotal = RecCount() Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche; Eval ( oMeter1:Set( RecNo() ), SysRefresh() ) Eu nao quero juntar tudo.. quer fazer individual. sem problema iniciar.. agora esta ideia ae diz q deixa mais rapido.. como eu faço para adpatar nesta rotininha ae? valeu Um Xharbraço. Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar id=quote>id=quote>Jef, tudo bem?? WPASSO:=RecCount()/100 oMeter1:nTotal = RecCount() Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche; Eval ( oMeter1:Set( RecNo() ), SysRefresh() ) EVERY WPASSO Sem isso a indexação fica 6 VEZES MAIS LENTA. Faça um teste num DBF com 500.000 registros. Marque o tempo com e sem essa dica e compare, lembrando que quem me ajudou foi o Rossine. Um abraço Paulo Araújo Clipper53b/FW26/Blinker70 Ajudar é um prazer, agradecer é uma obrigação Editado por - pauloaraujo on 07/12/2005 13:20:09 Quote Link to comment Share on other sites More sharing options...
elitenet Posted December 7, 2005 Report Share Posted December 7, 2005 Caros Amigos Explicando a solucao passada e o seguinte: A Clausula EVERY do index on e simplesmente um parametro que determina de quanto em quantos registros indexados o index on chamara a funcao do Eval. Pois sem esta clausula o index on chama a funcao do eval a cada registro indexado. Ex: Voce passando como parametro o Resultado do calculo Reccount()/100 no exemplo acima com 500000 registros, voce estaria chamando a funcao para atualizar o meter a cada 5000 registros o que aumenta a velocidade de indexacao por chamar menos vezes a atualizacao do meter. O Interessante neste caso e criar uma funcao que calcule isso variavelmente de acordo com o numero total de registros do arquivo, quando tiver muito aumenta o intervalo de atualizacao e quando tiver pouco diminui o intervalo, assim voce teria um ganho maior de velocidade quando o arquivo estiver cheio. Pois dividindo por 100 no caso de 500000 registros o intervalo deveria ser maior de atualizacao do meter. Marcelo Gomes elitenet@terra.com.br FW 2.3C/CLIPPER 5.2E/BLINKER 7.0 Quote Link to comment Share on other sites More sharing options...
jbinfo Posted December 7, 2005 Report Share Posted December 7, 2005 realmente amigos, a diferença entre se usar um meter ou não é gritante... tenho um arquivo aqui que criei para testes com 100.000 registros. Em clipper puro, compilado em 32 bits, ele demora 4 segundos para criar um Ãndice CDX. Porém se eu utilizar uma meter com o fwh para demonstrar o andamento do processo de indexação, o tempo para finalização sobe para 152 segundos !!! estou mandando a rotina que criei para fazer o meter, naum utilizo a cláusula EVERY pois faço o cálculo e dou o set direto no eval.. mas acho que isso não influenciaria tanto assim na velocidade do processo... ae vai: #include 'fivewin.ch' function Main() local oDlg local oMtr local nPercent request DBFCDX rddsetdefault("DBFCDX") dbsetdriver("DBFCDX") DEFINE DIALOG oDlg FROM 1,10 TO 8,50 ; TITLE OemToAnsi( "Teste de Meter para indexacao" ) nPercent := 0 oDlg:lHelpIcon := .F. @ 01.0,01.8 METER oMtr VAR nPercent ; TOTAL 100 ; SIZE 135,10 ; BARCOLOR CLR_BLUE, CLR_WHITE ; OF oDlg @ 01.8,05.0 BUTTON "&Iniciar" ; ACTION Idxmtr(oMtr,nPercent) ; SIZE 50,12 @ 01.8,14.5 BUTTON "&Desistir" ; ACTION oDlg:End() ; SIZE 50,12 ACTIVATE DIALOG oDlg CENTER return NIL static function Idxmtr(oMtr,nPercent) if !file('TESTE.DBF') ? "O arquivo 'TESTE.DBF' nao foi encontrado." else select 1 use TESTE.DBF endif index on nomcam tag nomcam to index.cdx ; eval ( oMtr:Set(int(RecNo()*100/RecCount())), SysRefresh()) return NIL xharbraços a todos! =P Guilherme Gonçalves Campinas-SP xHarbour 99.5/Bcc55/FWh2.5/Workshop Quote Link to comment Share on other sites More sharing options...
elitenet Posted December 7, 2005 Report Share Posted December 7, 2005 Caro Guilherme Seguindo as explicacoes que dei, desta forma que voce fez vai ficar muito lento mesmo. Pois para o index on chamar o eval dando um set no meter a cada registro indexado vai levar tempo mesmo. Mas se voce criar um intervalo de atualizacao do meter com a clausula every este tempo vai cair e muito! Marcelo Gomes elitenet@terra.com.br FW 2.3C/CLIPPER 5.2E/BLINKER 7.0 Quote Link to comment Share on other sites More sharing options...
pauloaraujo Posted December 7, 2005 Report Share Posted December 7, 2005 citação:realmente amigos, a diferença entre se usar um meter ou não é gritante... tenho um arquivo aqui que criei para testes com 100.000 registros. Em clipper puro, compilado em 32 bits, ele demora 4 segundos para criar um Ãndice CDX. Porém se eu utilizar uma meter com o fwh para demonstrar o andamento do processo de indexação, o tempo para finalização sobe para 152 segundos !!! estou mandando a rotina que criei para fazer o meter, naum utilizo a cláusula EVERY pois faço o cálculo e dou o set direto no eval.. mas acho que isso não influenciaria tanto assim na velocidade do processo... Guilherme Gonçalves Campinas-SP xHarbour 99.5/Bcc55/FWh2.5/Workshop id=quote>id=quote>Guilherme, tudo bem?? Eu iniciei a conversão dos meus sistemas exatamente pela indexação e fui comparar o desempenho entre o clipper puro e o FW com METER. Quase desistà do FW (hehehehe). Com a opção EVERY, igualei a velocidade entre o Clipper puro e o FW com METER: Pentium 4 + 110.000 registros + 10 indices = 20 segundos. Agora, esse tópico está fugindo de sua origem. Tenho certeza de já ter lido algo sobre o METER atuando em TODOS os TAGs de um DBF. Já pesquisei e não encontrei. Um abraço Paulo Araújo Clipper53b/FW26/Blinker70 Ajudar é um prazer, agradecer é uma obrigação Editado por - pauloaraujo on 07/12/2005 16:39:54 Quote Link to comment Share on other sites More sharing options...
jbinfo Posted December 9, 2005 Report Share Posted December 9, 2005 OK. Impressionante Paulo! Apesar de óbvio, não tinha percebido que fazer a atualização do meter a cada registro indexado demorava tanto! Acrescentei a cláusula every no mesmo prg para atualizar o meter a cada 5000 registros e o tempo que antes era de mais de 100 segundos caiu para 5! Vlew pessoal! xharbraços Guilherme Gonçalves Campinas-SP xHarbour 99.5/Bcc55/FWh2.5/Workshop Editado por - jbinfo on 09/12/2005 15:49:58 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.