Yury Posted March 4, 2013 Report Share Posted March 4, 2013 olá pessoal, boa tarde creio q esse assunto já foi abordado aqui no fórum, mas pesquisei todos os links e não encontrei uma solução vou descrever o "problema": uma determinada estação da rede (chamarei de terminal A) chama um programa que lê um arquivo DBF indexado (CDX) por um campo tipo DATA, utilizando DBSEEK, e demora 20 segundos para finalizar a leitura do arquivo no intervalo solicitado agora outra estação (chamarei de terminal A chama o mesmo programa, sendo que a primeira estação que chamou (terminal A) ainda está executando o programa ; o tempo de execução do programa no terminal B até finalizar a leitura dos registros agora é de 1 minuto se o terminal A chamar novamente o programa, sem que o terminal B abandone, o tempo para finalizar também é de 1 minuto, ou seja, demora nas duas estações o mesmo tempo de 1 minuto quando o acesso ao programa é simultâneo quando 1 dos terminais abandona o programa, o terminal que permanece executando volta a obter o resultado em 20 segundos já isolei os trechos do programa e constatei que: - a "abertura dos arquivos" com DBUSEAREA mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais - o "fechamento dos arquivos" com CLOSE mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais - a velocidade de leitura no while acessando por um terminal é muito mais rápida do que quando está acessando pelos 2 terminais portanto é o LOOP que está sendo afetado pelo acesso simultâneo, perdendo desempenho informações sobre o ambiente onde foi testado isso: - servidor com Windows Server 2012 Standart - terminais com Windows 7 Professional nas pesquisas que fiz sobre o assunto me deparei com inúmeras dicas falando sobre o cabeamento da rede, placa de rede, anti-vÃrus, etc... mas posso lhes adiantar que a rede está funcionando ok e as estações em que foi testado este comportamento estão com anti-vÃrus desabilitado e firewall do windows liberando arquivos DBF, CDX, FPT, etc... (testamos em várias estações) inclusive em um cliente que reclamou dessa situação o comportamento é o mesmo, testamos em várias estações também para comprovar a rotina q estamos utilizando para testar é muito simples: //----------------------------------------------------------------------------- #include 'FiveWin.ch' Function Teste() cTime:=TIME() Select 1 Use "M:\TESTE.DBF" Alias "NF" Shared Set index to "M:\TESTE.CDX" dDataIni := CTOD("01/01/2013") dDataFim := DATE() nContador := 0 NF->(DBSETORDER(1)) NF->(DBSEEK(DTOS(dDataIni),.T.)) WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFim nContador++ NF->(DBSKIP()) ENDDO ? 'Tempo da leitura dos registros: ' + CRLF +; ElapTime(cTime,TIME()) + CRLF +; NETNAME() + CRLF +; ALLTRIM(STR(nContador))+' registros lidos' // permanecer com esta mensagem em exibição e chamar o programa de outro // terminal CLOSE ALL RETURN //----------------------------------------------------------------------------- este comportamento não me parece normal , se alguém tiver alguma sugestão ou idéia eu agradeço obrigado Yury Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 4, 2013 Report Share Posted March 4, 2013 // Tente: WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFim SYSREFRESH() IF EOF() EXIT ENDIF nContador++ NF->(DBSKIP()) ENDDO Quote Link to comment Share on other sites More sharing options...
Yury Posted March 4, 2013 Author Report Share Posted March 4, 2013 olá João o sysrefresh() e o exit / eof() não alteraram em nada o comportamento do programa ou seja, a lentidão quando ocorre acesso simultâneo permanece obrigado Yury xHarbour 1.0 / FW 08.1 / SQLLIB Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 4, 2013 Report Share Posted March 4, 2013 Qual é intuito desta função, digo: O que ela tem que fazer na prática? Quote Link to comment Share on other sites More sharing options...
Yury Posted March 4, 2013 Author Report Share Posted March 4, 2013 olá João esta função é somente um exemplo para testes obrigado Yury Quote Link to comment Share on other sites More sharing options...
paiva Posted March 5, 2013 Report Share Posted March 5, 2013 Bom dia nao é M. do W7 ? eu tenho um Intel I7 2600 3.4 com 8GB men ran (+ so usa 4) qq pc ate antigoes da de 10 nele. e´absurdo isso. se abro uma NF emitida para mostra os itens se e´num w2003 demoras 5 segundos isso via TS aqui localmente no PC demora no MINIMO 20 segundos e a Merda do W7 com certeza. se abro net trava tudo se abre outlook trava tudo qq cois aque faz os outros 6 Nucleos ficam aguardando KKKKKK Infelizmente no w2003 nao se conegue + usar o msn so versao antigona e NAo da para nem OLhar os cleintes + novos e o jeito se achar uma solucao avise PAiva Quote Link to comment Share on other sites More sharing options...
emotta Posted March 5, 2013 Report Share Posted March 5, 2013 Yuri, isso acontece porque voce está sobrecarregando o processador. Voce precisa fazer com que o processador dê um "respiro", senão ele vai a 100% e praticamente reserva o processamento somente para seu programa. Pra resolver é importante que em códigos de processamento longo, que não tem intervenção do usário, voce faça o seguinte: nCont := 1 While !Eof() If Mod(nCont++,100)==0 ThreadSleep(1) EndIf DbSkip() EndDo Agra no seu código ficaria o seguinte: //-----------------------------------------------------------------------------#include 'FiveWin.ch'Function Teste()cTime:=TIME()Select 1Use "M:\TESTE.DBF" Alias "NF" SharedSet index to "M:\TESTE.CDX"dDataIni := CTOD("01/01/2013")dDataFim := DATE()nContador := 0NF->(DBSETORDER(1))NF->(DBSEEK(DTOS(dDataIni),.T.))WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFimnContador++ If Mod(nContador,100)==0 // ALTEREI AQUI ThreadSleep(1) EndIf NF->(DBSKIP())ENDDO? 'Tempo da leitura dos registros: ' + CRLF +; ElapTime(cTime,TIME()) + CRLF +;NETNAME() + CRLF +;ALLTRIM(STR(nContador))+' registros lidos' // permanecer com esta mensagem em exibição e chamar o programa de outro // terminalCLOSE ALLRETURN//----------------------------------------------------------------------------- Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted March 6, 2013 Report Share Posted March 6, 2013 Pessoal boa noite Posso dar uma de rivelino, como dizia ele uma patada atõmico, um belo chute. Verifique no W7 (Opções avançadas) qual a prioridade de processamento se equilibrado, dados, cache ou programa e no SERVER a parte de desempenho de equilibrio se dados ou programa, pode ser isso. []s, Quote Link to comment Share on other sites More sharing options...
Yury Posted March 7, 2013 Author Report Share Posted March 7, 2013 obrigado pela dica Eduardo vou testar e posto aqui o resultado att Yury Quote Link to comment Share on other sites More sharing options...
jbinfo Posted March 14, 2013 Report Share Posted March 14, 2013 Boa noite Yuri, Tambem estou tendo este problema em alguns clientes, algumas rotinas qdo acessado por mais de 1 usuario fica muito lenta....veja se consegue algum teste funcionar e retorne por favor... Abraços Leandro Bassiquette JB Informatica Quote Link to comment Share on other sites More sharing options...
vagner Posted March 14, 2013 Report Share Posted March 14, 2013 Olá,Se for Win7 e for Home Edition, esquece, as vezes nem abrir o arquivo simultaneamente vc consegue:( Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2013 Author Report Share Posted March 14, 2013 Olá Eric nos testes que realizei usei um DBF com 7000 registros sobre as dicas q vc postou sobre quantidade de arquivos nas pastas, abrir com READONLY e executar o programa sem mais "nada" aberto eu já tentei fazer essas modificações, mas não surtiu efeito (na verdade li um post seu no Clipper On Line, se não me engano, onde tinha essas dicas) sobre executar como adm, vou testar obrigado pela atenção abraço Yury Quote Link to comment Share on other sites More sharing options...
augustogomes Posted March 15, 2013 Report Share Posted March 15, 2013 Yury Eu já passei por este tipo de problema várias vezes desde que comecei a migrar meus programas de clipper para fivewin. Quando usei o xharbour e compilei os programas em ambiente 32bits mantendo as telas em texto os arquivos em dbf, abriam em tempo e velocidade igual ao que fazia em clipper, inclusive dava impressão de ser até mais rápido, mas quando migrei para o fivewin com telas e recursos gráficos ai voltou a ficar muito lento. Foram vários fatores que tive que arrumar, mas o que percebi era que quando estava em windows server com gerenciador de dominio ativado e o AD o sistema funciona muito melhor que quando não tem. Por padrão só instalo em server com AD ativado. Não seria este o problema no seu caso? Fiz um teste pegando sua rotina e compilei ela com um arquivo meu que tem 980 mil registros e coloquei o loop para filtrar 298 mil, usei um indice com campo data como no seu exemplo e um servidor windows server 2008 r2 com AD ativado. Nos micros com windows XP levou 0:22 segundos e win7 0:25 segundos, quando os 2 foram ativados simultaneamente o tempo ficou em 2 minutos em cada. Agora usando o mesmo exemplo em uma rede sem o AD ativado o tempo levou 6 minutos e 20 minutos quando acessado por meio de wireless. rss Para os testes usei seu exemplo teste.prg mudando apenas o arquivo. Abçs. Augusto Quote Link to comment Share on other sites More sharing options...
Daniel Lopes Filho Posted March 22, 2013 Report Share Posted March 22, 2013 qual a velocidade da rede ? placas de rede e do switch ? ja aconteceu de ter placas antigas 10/100 ... troquei tudo para 10/100/1000 com um switch hp e nao precisei mudar 1 linha no meu codigo por favor verifique a rede e a configuração do servidor e das estações maquinas com windows home (isso é para ambiente domestico e nao para empresa) windows 7/64 com 2b de ram a maquina le mais o disco pois nao tem memoria para processar as informações por isso recomendo verificar os equipamentos .... Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted March 25, 2013 Report Share Posted March 25, 2013 Yury Vc ainda continua com o problema, mesmo depois de tantas informações? Então vou perguntar, vc simulou este problema em outro ambiente? Ou seja, copiar todas as informações deste cliente e fazer os testes? []s, 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.