我晕倒,CopyFile函数拷贝大文件的时候非常占用资源,大家有没有能节省系统资源的办法勒?
CopyFile一个大文件,经常会使程序停止响应,Copy完成以后不重新启动系统还很慢,
慢点拷贝文件无所谓,起码让我在拷贝文件的时候能干点其他的事情不?
CopyFile一个大文件,经常会使程序停止响应,Copy完成以后不重新启动系统还很慢,
慢点拷贝文件无所谓,起码让我在拷贝文件的时候能干点其他的事情不?
调试欢乐多
http://lysoft.7u7.net
function myCopyFile(Source, Dest: string): Boolean;
var
f1, f2, len: Integer;
Buffer: string; { 不定义成buffer: array [0..8192*1024] of char 是因为delphi中分配过大的栈空间时编译器生成的是一个push指令的循环而不是直接设置esp, 效率太低}
begin
result := false;
setlength(Buffer, 8192*1024); // 开8兆缓存
f1 := fileopen(source, fmOpenRead or fmShareDenyNone);
if f1 >= 0 then
try
f2 := filecreate(dest);
if f2 >= 0 then
begin
repeat
len := fileread(f1, buffer[1], 8192*1024);
if len > 0 then
filewrite(f2, buffer[1], len);
until (len <= 0);
result := true;
fileclose(f2);
end;
finally
fileclose(f1);
end;
end;
不用用循环的PUSH 来分配栈的。至少在D6不是,以前的版本就不清楚了,但是我相信也不会是。
PUSH 一次分配4个字节,得循环多少次啊,我相信Borland不会这么干。
我也是偶然发觉的. 一个子函数定义了一块4M的局部变量, 结果发觉运行时卡了一会然后报堆栈溢出错. 结果打开CPU窗口一看, 差点晕倒, 发觉它函数入口处竟然是个循环PUSH语句.