Página 3 de 3

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 08 Fev 2017 15:21
por aprendiz_ce
José Quintas,

Acho que o link anterior deveria está com problemas pela manhã, pois ainda pouco consegui baixar o OS_Lib e também acessei todo o conteúdo do referido site.

Resultado do teste:
Inclui logo abaixo dos meus "SETs" do sistema, o OL_AutoYield(.T.) e nada mais... compilei e executei sem erro algum. Fiquei monitorando pelo "Gerenciador de Tarefas" e percebi que o uso da CPU com o sistema em STAND BY ficou oscilando entre 1 a 28% e que anterior mente já partia dos 55%. Seria isso mesmo, ou eu apliquei a OS_LIB de forma errada? Monitorei em alguns "LOOP" e "INDEX", mas não vi mudança muito expressiva se comparo sem o uso do OS_LIB.

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 08 Fev 2017 16:48
por JoséQuintas
Sim, isso mesmo.
O modo automático reduz aonde possivel, procurando não deixar lento nem o aplicativo e nem o Windows.

Pra melhorar mais, pode incluir chamadas a OL_Yield() em pontos estratégicos, aonde tem certeza que vai ficar aguardando.
Programas Windows também tem algo assim.

Só fazer um módulo de teste e vai ver a diferença.

Código: Selecionar todos

PROCEDURE Main
   DO WHILE Inkey() != 27
        OL_Yield()
   ENDDO
   RETURN
O consumo fica em ZERO.

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 08 Fev 2017 16:50
por JoséQuintas
Em bloqueios de registro:

Código: Selecionar todos

DO WHILE ! Rlock()
   Inkey(0.5)
   OL_Yield()
ENDDO
E outros lugares mais.

Liberando tempo para o Windows, ele tem tempo de conversar com servidor, ler disco, gravar disco, bloquear, etc. etc.

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 09 Fev 2017 14:26
por aprendiz_ce
Boa tarde, Josè Quintas.

Ainda bem que eu acertei no uso da OS_LIB. Agora, com essas suas orientações finais, a coisa vai ficar melhor ainda. Confesso que fiquei surpreso com essa LIB, pois funciona mesmo e acaba dando um "Upgrade" no desempenho do EXE.

Muitíssimo obrigado pela sua colaboração.

Forte abraço!

P.S.: Notei que o EXE ficou com 1/3 do tamanho se comparado quando ele era compilado com Exospace. Muito bacana!

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 09 Fev 2017 18:33
por JoséQuintas
Mas e quanto ao problema de reindexação?
Ou no final tinha a ver com liberar tempo ao Windows?

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 11 Fev 2017 13:04
por aprendiz_ce
Olá Josè Quintas, bom dia.

Foi até bom você ter perguntado!

Para ser sincero, no momento está 100%. Mas acho que o conjunto das ações melhorou o desempenho desse ERP, e como isso, consegui que a indexação e o tempo de Windows ficassem a contento.

Comentário:
Notei uma coisa estranha. Quando usei o OS_LIB pela primeira vez e monitorei o uso de recursos do PC/CPU, percebi uma redução significativa, só que agora, ao refazer o mesmo monitoramento, o uso de recursos voltou aos 50%, e isso monitorando somente com o ERP em execução, nada além dele. O que pode ser? Quando inicio o monitorando o mesmo inicia em 1% e quando carrego o ERP o mesmo dispara para 50%.

Grato pela sua atenção e aguardo o seu comentário.

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 11 Fev 2017 22:38
por JoséQuintas
Esquisito. talvez dependa do momento.
Não custa confirmar se depois dos testes acabou deixando sem OL_AutoYield( .T. ) ... rs

Aqui notava que ao mexer no mouse, já causava mudança no consumo de CPU, seja Clipper ou Windows.
Ao carregar o EXE é normal, consome mais tempo no início, ou durante algum processo, pois está trabalhando.

Se usa mouse, superlib por exemplo, é bom colocar chamadas a OL_Yield() no DO WHILE de checar mouse.
Mouse e teclado são os "vilões" de 100% de CPU.

Eu cheguei a alterar minha GETSYS e aonde possível, substituindo Inkey() por MyInkey(), principalmente onde era infinito (ZERO) ou muito tempo.
Exemplo:

Código: Selecionar todos

FUNCTION MyInkey( nTempo )

   LOCAL nKey := 0

   IF nTempo == NIL
      OL_Yield()
     nKey := Inkey()
   ELSEIF nTempo == 0
      DO WHILE nKey == 0
         nKey := Inkey()
         OL_Yield()
      ENDDO
   ELSEIF nTempo > 0.3
     DO WHILE nKey == 0 .AND. nTempo > 0
        nKey := Inkey( 0.3 )
       nTempo -= 0.3
   ENDDO
   ELSE
     OL_Yield()
      nKey := Inkey( nTempo )
   ENDIF
   RETURN nKey

clipper 5.2b+exspace 1.0g x clipper 5.2e+blinker7

Enviado: 14 Fev 2017 12:46
por aprendiz_ce
JoséQuintas escreveu:Esquisito. talvez dependa do momento.
Não custa confirmar se depois dos testes acabou deixando sem OL_AutoYield( .T. ) ... rs

Aqui notava que ao mexer no mouse, já causava mudança no consumo de CPU, seja Clipper ou Windows.
Ao carregar o EXE é normal, consome mais tempo no início, ou durante algum processo, pois está trabalhando.

Se usa mouse, superlib por exemplo, é bom colocar chamadas a OL_Yield() no DO WHILE de checar mouse.
Mouse e teclado são os "vilões" de 100% de CPU.

Eu cheguei a alterar minha GETSYS e aonde possível, substituindo Inkey() por MyInkey(), principalmente onde era infinito (ZERO) ou muito tempo.
Exemplo:

Código: Selecionar todos

FUNCTION MyInkey( nTempo )

   LOCAL nKey := 0

   IF nTempo == NIL
      OL_Yield()
     nKey := Inkey()
   ELSEIF nTempo == 0
      DO WHILE nKey == 0
         nKey := Inkey()
         OL_Yield()
      ENDDO
   ELSEIF nTempo > 0.3
     DO WHILE nKey == 0 .AND. nTempo > 0
        nKey := Inkey( 0.3 )
       nTempo -= 0.3
   ENDDO
   ELSE
     OL_Yield()
      nKey := Inkey( nTempo )
   ENDIF
   RETURN nKey
Pois é, muito estranho!

Eu fiz o teste com o "OL_AutoYield( .T. )", e isso eu tenho certeza, pois conferi no fonte e compilei os PRGs logo em seguida.

Sobre o uso de mouse... eu não uso! Pra ser mais especifico, não uso nada além do próprio Clipper (puro). A única coisa que inclui de novo foi esse OS_LIB que passei a usar agora.