Página 1 de 2

Lentidão do Windows XP

Enviado: 14 Jul 2006 16:01
por jpalma
Instalei meu sistema em um cliente com Windows XP, porem esta muito LENTO tanto ao ACESSAR quanto no PROCESSAMENTO.
O mais grave é quando CLICO com o mouse no icone de acesso ao sistema, aparece uma tela PRETA e um cursor piscando e a tela principal demora a aparecer.


grato

Enviado: 14 Jul 2006 22:10
por matrix
Eu linko com Exospace ........
no inicio do prg........... FreeTSlice(20)

e o atalho do .exe vc crie um .bat
Mode con lines=25
seu.exe

e crie o atalho do bat e naum do .exe............no meu caso está 100%

qquer coisa, dá um grito.....t+

Enviado: 15 Jul 2006 09:21
por Hstadler
Bom dia

Nesta semana instalei o XP no comp. de minha casa pra fazer alguns testes com o sistema. Compilei com o timeslice, tudo certinho, porém o desempenho do sistema (não do winXP) não é o mesmo como no win 98.
Infelizmente Clipper com Win XP não da certo. Fica bem mais lento na hora de uma emiisão de NF (onde se abre diversos arquivos), tem o problema de tela cheia (resolvi com o Fullscreen mas os caracteres acentuados ficam com aquelas fontes estranhas), e o pior de todos o DOS é emulado.
Minha opinião, pra trabalhar com sistema compilado em Clipper é melhor ficar com o win 98, se quiser mudar, teremos que tentar o xHarbour.

Até mais

Enviado: 15 Jul 2006 18:01
por Maligno
Hstadler escreveu:Nesta semana instalei o XP no comp. de minha casa pra fazer alguns testes com o sistema. Compilei com o timeslice, tudo certinho, porém o desempenho do sistema (não do winXP) não é o mesmo como no win 98.
Infelizmente Clipper com Win XP não da certo.
Discordo. Tenho clientes usando desde Win98 até WinXP e todos os programas funcionam perfeitamente, sem qualquer problema de lentidão. Tanto na manipulação de arquivos de dados quanto nas impressões. Aliás, acho que posso dizer que no WinXP é tão rápido (se não for mais rápido) quanto no Win98. O fato do DOS ser emulado não interfere em nada. Uso Clipper v5.2 e BLinker 7. Uso não, usava. :-)

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 17 Jul 2006 08:45
por Hstadler
Bom dia Maligno

Em virtude do seu esclarecimento sobre o desempenho do Clipper em XP, como faço pra poder melhorar essa performance, pois compilei com o timeslice, uso clipper 5.2

pra vc ter uma ideia, eu tinha no arq de NF 12000 registros, fiz uma limpeza e deixei somente com 336 (exatamente), ok, quando abro a tela para fazer uma nova nota, há uma certa demora na mudança de campos, isto é dou um ENTER e demora para ele ir pro outro campo, sem contar quando vc quer pular partes das notas com ESC, fica dificil de aceitar

Mas se vc puder orientar pra melhorar eu agradeço

Obrigado

Henrique

Enviado: 17 Jul 2006 09:45
por Hstadler
esqueci de colocar tudo

uso clipper 5.2, RTlink, DBF NTX

falou

Enviado: 17 Jul 2006 12:43
por jpalma
Pessoal

Obrigado pelas dicas.

Enviado: 18 Jul 2006 04:22
por Maligno
Hstadler escreveu:Em virtude do seu esclarecimento sobre o desempenho do Clipper em XP, como faço pra poder melhorar essa performance, pois compilei com o timeslice, uso clipper 5.2

pra vc ter uma ideia, eu tinha no arq de NF 12000 registros, fiz uma limpeza e deixei somente com 336 (exatamente), ok, quando abro a tela para fazer uma nova nota, há uma certa demora na mudança de campos, isto é dou um ENTER e demora para ele ir pro outro campo, sem contar quando vc quer pular partes das notas com ESC, fica dificil de aceitar
Felizmente hoje estou com mais tempo e posso discorrer sobre o assunto com mais tranquilidade.

O desempenho do sistema como um todo sofre influência de diversos fatores. Da forma como você falou: simplesmente mudando de um campo para outro, não conheço. Nunca passei por isso. Mas vou tentar enumerar o que me lembro que causa lentidão num programa Clipper, de acordo com as experiências que vivi.


1) LISTA GET COM CENTENAS DE CAMPOS
Uma das coisas que me custou uma boa carga de trabalho. O cliente reclamava que a montagem da lista de GETs era lenta, e ficava mais lenta com o tempo, até que o programa abortava. Descobri que a culpa era, em parte, da função _GET_(), escondida no comando de criação dos campos GET. É ela quem cria cada pseudo-objeto GET. Cada campo, portanto, resultava numa chamada a essa função. Como haviam centenas de campos, era natural que houvesse uma grande demora. Isso eu resolvi modificando o GetSys (rotina que controla a lista GET) para utilizar um único objeto GET para todo o sistema. Assim, _GET_() era usada uma única vez. Nesse ponto, fim do problema de lentidão na montagem da lista. Mas, infelizmente, o uso desse artifício não é nada fácil para quem não tem intimidade com a GetSys().

2) FRAGMENTAÇÃO DE MEMÓRIA
Um bug no sistema de "garbage collector" do Clipper faz com que ele não apenas não funcione, mas consuma um excessivo tempo de CPU. O consumo de CPU, como você já sabe, resolve-se com a função FreeTSlice(). Ela faz diferença na liberação do tempo de uso da CPU. Mas FreeTSlice() não resolve (e nem pretendia resolver) o problema da fragmentação da memória, que continua consumindo recursos do sistema, uma vez que a cada instante, mais swaps em disco continuam sendo necessários, por falta de memória no "heap". Resolvi isso com uma chamada a função Memory(-1) em pontos estratégicos do sistema: imediatamente depois do descarte de matrizes e fechamentos de arquivos de dados (que internamente utilizam matrizes). Ou até mesmo antes da criação de matrizes e aberturas de arquivos. O parâmetro -1, não documentado, força o Clipper a, finalmente, fazer o "garbage collector" que, afinal de contas, funciona. O problema dele está apenas na forma do "gatilho" que o faz funcionar. Nativamente, pelo tempo ocioso do sistema, ele não funciona. O jeito então é chamá-lo de forma direta, através de Memory(-1) nos pontos mais estratégicos do programa.


Para a melhoria do sistema e torná-lo mais eficiente, principalmente no quesito gerenciamento de memória,...


3) LINKER PARA O MODO PROTEGIDO DE MEMÓRIA
Li na outra mensagem que você ainda utiliza o RTLink. Esse linker já teve seus dias. Nos dias de hoje, e já há um bom tempo, o BLinker é considerado imbatível nesse ponto. Além de você poder utilizar vários recursos extras que ele dispõe (a alternativa ao comando RUN é uma que se detaca), você também poderá montar seus programas para o uso do modo protegido. A vantagem nesse modo é que o programa passa a utilizar toda a memória da máquina, esquecendo de vez o limite de 640KB. Ou seja, seu programa não utiliza mais a memória num plano segmentado. Ele passa a ver a memória como um plano linear. Mais memória disponível significa que swaps em disco tornam-se desnecessários na maior parte dos casos, o que resulta num aumento da velocidade de execução.


Esses três ítems se referem aos problemas básicos do Clipper com manipulação de memória. Nenhum deles deve se encaixar no seu problema de lentidão na troca de campos. Mas imagino que seu problema possa estar relacionado não aos campos em si, mas no que é feito "durante" a troca de campos, quando executada, por exemplo, a função relacionada à cláusula VALID e/ou WHEN. Se você tiver algum processamento "mais pesado" em um desses ou nesses dois pontos, a troca de campos se tornará naturalmente mais lenta. O gargalo pode estar aí. Não posso dizer muita coisa sem ver seu código. Até porque, você não especificou se isso ocorre em todos os campos em todas as listas GETs, ou em alguns poucos.


Adicionalmente aos ítens que normalmente causam lentidão nos programas Clipper, dá pra citar também os relacionados aos índices. Como na outra mensagem você diz que ainda usa NTX, resolvi incluir mais esse ponto.


4) ARQUIVOS DE ÍNDICES NATIVOS (NTX)
Isso é uma coisa que ninguém discute: indíces NTX são extremamente mais lentos que os índices compostos/compactados (ex: SIX), além de ser menos confiáveis. Aconselho fortemente a troca pelos índices NSX/CDX que são muito mais rápidos e seguros, e possuem recursos adicionais que trazem muito mais conforto e segurança para o programador. Faça uma busca na pesquisa do fórum. Certamamente alguns links serão mostrados. Esse assunto já foi debatido várias vezes.


E, voltando ao assunto "sistema operacional", volto a frisar que a versão do sistema operacional não influi na performance do programa Clipper. Mesmo que se trate de um sistema operacional que emule o DOS. Tudo funciona de forma absolutamente normal, como sempre foi. Problemas de performance normalmente tem relação com os ítens que enumerei ou, em casos mais graves, com a forma da codificação utilizada. Mas nesse caso, o problema é pontual, não genérico, como parece ser o seu caso.


Espero que tudo o que eu disse possa ajudá-lo de alguma forma a resolver senão todo, pelo menos parte do seu problema.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 18 Jul 2006 11:42
por Eliane
O meu problema em relação ao XP é um pouco diferente. Li as instruções da página e estou analisando cada uma delas.

Tenho um servidor linux com máquinas Win98 e outras XP. Quando acesso o programa clipper do XP o sistema vai bem, mas se deixá-lo aberto, o XP fica uma "carroça" para acessar OUTROS aplicativos e internet.

Uso o clipper 5.2e e o BLINKER 4.1 - Menu Lnk é este:

# BLINKER
BLINKER INCREMENTAL OFF
BLINKER EXECUTABLE EXTENDED


file (nome dos prgs - cerca de 90 )

SEARCH BLXCLP50
library clipper,extend,DBFCDX,PRN_LPT
output EXPRECDX
FILE CLD.LIB

Acho que tenho que usar outras diretivas do BLINKER. Agradeço a ajuda desde já.

Enviado: 18 Jul 2006 12:28
por Hstadler
Oi Eliane

Se o seu SO o WinXP fica lento, é porque ele deve estar usando praticamente 100% do processador, mas isto é fácil de resolver, bastando compilar seu sistema com o timeslice, caindo pra uns 2%.

No restante que o Maligno discreveu, eu estou analisando os meus prgs.

Se vc precisar do timeslice eu mando por e-mail

Até mais

Henrique

e-mail

Enviado: 18 Jul 2006 14:11
por Josmar dos Santos
Ola Hstadler...se vc poder me mandar.tambem.eu agradeceria..eu tinha aqui ..mas nao estou encontrando na maquina...
josmar35@itelefonica.com.br
um abraço

Enviado: 18 Jul 2006 14:20
por Maligno
Eliane escreveu:Uso o clipper 5.2e e o BLINKER 4.1 - Menu Lnk é este:

# BLINKER
BLINKER INCREMENTAL OFF
BLINKER EXECUTABLE EXTENDED


file (nome dos prgs - cerca de 90 )

SEARCH BLXCLP50
library clipper,extend,DBFCDX,PRN_LPT
output EXPRECDX
FILE CLD.LIB
Troque o BLXCLP50 por BLXCLP52, que é a versão apropriada para o Clipper v5.2.
No demais, à primeira vista, tudo parece ok, a exceção do CLD.LIB que serve apenas para versões de teste. Para a versão final, pode comentar essa linha. Mas isso não interferiria na performance do programa.
Para efeito ilustrativo, meu LNK padrão, comum a todos os programas. Nele falta apenas a parte que relaciona os arquivos fontes.

Código: Selecionar todos

                   # ----------------------------------------------
                   # 01/10/04
                   # Script comum a todos os aplicativos do projeto
                   # ----------------------------------------------

file ctusp         # CATools
file sixnsx,sixuk  # RDD
file nomemo        # Exclude memo support

library six3       # SIXRDD
library sia_syst   # System
library sia_comm   # Common Components
library ctp52      # CATools
library blxclp52   # Blinker (extended mode)
library hlapi_cm   # HardLock

blinker clipper page off
blinker procedure depth 70
blinker executable extended
blinker executable clipper //F:128 //DYNF:8 //SWAPK:4096 //SWAPPATH:"\SIA\TMP" //TEMPPATH:"\SIA\TMP"
blinker incremental off
blinker executable nodelete
blinker executable compress 1

nobell
map=map s,a
A função FreeTSlice(), comentada pelo nosso colega, está disponível para download na minha página (fonte e objeto).

[]'s
Maligno
http://www.buzinello.com/prg

funçao

Enviado: 18 Jul 2006 14:29
por Josmar dos Santos
Ja baixei Maligno..obrigado
:))

Enviado: 18 Jul 2006 19:28
por Hstadler
Ola Maligno

Verificando meus prg e um pouco mais que li no forum, acho que o meu maior problema são os COMMIT (no arq de NF) pois no restante do sistema não há esse problema.

Outra coisa importante q vc falou é a troca do RTlink para o Blinker e de NTX pra CDX, onde vou começar o meu trabalho.

Muito obrigado pela suas dicas, pois elas serão de grande utilidade.,

Até mais

Enviado: 19 Jul 2006 10:03
por Eliane
Uso o DBCOMMIT() a cada gravação de registro. Isto pode comprometer um pouco ( não sei quanto ) a velocidade do sistema, mas quanto a intregridade dos dados na rede, será que não ficaria comprometida ?