liberar recursos ?!?!?!

Delphi

31/03/2003

Bom. Eu tenho um FOR que vai de 1 a 10.000 .
Esse FOR vai copiar um arquivo chamado ´teste.txt´ para um outro local com nomes diferentes. Por exemplo: 00001.txt, 00002.txt, ... , 10000.txt

Até os 200 primeiros ele copia q eh uma beleza rápido pra xuxú. Só que passou dos 250, 300 ele começa a ficar MUITO lento.

Tem alguma maneira de eu liberar esta memória usada na cópia do arquivo, ou alguma coisa que libere recursos do sistema, para que ele possa continuar copiando na mesma velocidade que começou ?

Muito obrigado !
Bruno Martins Stuani
brunost@uol.com.br


Nildo

Nildo

Curtidas 0

Respostas

Okama

Okama

31/03/2003

Coloca o código aqui, eu testei a cópia de 10.000 arquivos e a velocidade não ocilou.



GOSTEI 0
Nildo

Nildo

31/03/2003

Valew pela ajuda okama !!!


var
i: integer;
begin
for i := strtoint(edit1.text) to strToInt(edit2.text) do
begin
copyFile(PChar(edit3.text), PChar(edit4.text + ´\´ + inttostr(i) + extractFileExt(edit3.text)), false);
progressBar1.position := trunc((i / strToInt(edit2.text)) * 100);
application.processmessages;
progressbar1.refresh;
end;
end;


Esse código comeca a lerdar depois dos 700 arquivos copiados...
Mas na verdade o código que copia os arquivos esta no meu programa de backup. Ele faz muitas comparações e talz. Por isso nao da pra copiar aqui. Eh MUITO grande. Esse código foi o que eu usei pra criar os 10.000 arquivos pra testar com meu backup. Mas mesmo com esse código passa dos 700, a velocidade já não mais a mesma.


GOSTEI 0
Okama

Okama

31/03/2003

Novamente não vi diferença, copiei um arquivo de 500kb e não houve alteração. entretando fiz algumas modificações no código, acredito que o progressbar esteja consumindo muito recurso, tente substituí-lo por um StaticText, e veja se melhora, aqui não vi diferença.


var
i: integer;
begin
[b:e0a96f8de3]progressBar1.Max := strToInt(edit2.text);[/b:e0a96f8de3]
for i := strtoint(edit1.text) to strToInt(edit2.text) do
begin
copyFile(PChar(edit3.text), PChar(edit4.text + ´\´ + inttostr(i) +
extractFileExt(edit3.text)), false);

[b:e0a96f8de3]progressBar1.position := I;[/b:e0a96f8de3]
application.processmessages;
[color=blue:e0a96f8de3]//progressbar1.refresh;[/color:e0a96f8de3]
[b:e0a96f8de3]StaticText1.Caption := inttoStr(I);[/b:e0a96f8de3]
end;


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

31/03/2003

Nildo,

Fiz o teste com base no código do Emerson.EN e percebi um queda de performance após alguns segundos. Acredito que pode estar relacionado ao arquivo de ´swap´. Testei em uma máquina com W98 e 128 de Ram. Farei um novo teste mais tarde em casa com w2000 e 512 de Ram.


GOSTEI 0
Nildo

Nildo

31/03/2003

Okama, não é o tamanho de arquivo que vai diferenciar. É a quantidade. Eu fiz um teste com 10.000 arquivos de 1.9 kb cada. Quando chega mais ou menos nos 400 e poucos ele começa a perder recursos e fica muito lento. Chega uma hora que dá até pra ver copiando 1 por 1


GOSTEI 0
Nildo

Nildo

31/03/2003

Novamente, mudei o código. Tirei a progressBar, e coloquei um Label que mostra a quantidade de arquivos que jah foram copiados. Novamente notei que ele começa a ficar lerdo a partir dos 400 e poucos.


var
i: integer;
begin
for i := strtoint(edit1.text) to strToInt(edit2.text) do
begin
copyFile(PChar(edit3.text), PChar(edit4.text + ´\´ + inttostr(i) + extractFileExt(edit3.text)), false);
label7.caption := inttostr(i) + ´ / ´ + edit2.text;
label7.refresh;
application.processmessages;
end;
end;


Eu sei que este processo toma 100¬ do processador. Eu liguei o RamBooster pra liberar memória enquanto copiava os arquivos, ele realmente copiava mais rápido. Só que a diferença era mínima. Vamos tentar descobrir junto comigo porque que dá essa desaceleração do processo...


GOSTEI 0
Nildo

Nildo

31/03/2003

O pior eh que eh verdade.
Eu teste com o explorer aberto copiando 1000 arquivos de 1.8kb cada. E depois testei com ele fechado. Deu uma diferença de 4 segundos (aberto: 32, fechado: 28)


GOSTEI 0
POSTAR