Delphi中如何减少文件操作过程中对系统资源的消耗?(100分)

  • 主题发起人 主题发起人 guoDY
  • 开始时间 开始时间
G

guoDY

Unregistered / Unconfirmed
GUEST, unregistred user!
本人编制一个ISAPI程序,该程序读取一个文本文件(62k),从该文件
中筛选所需的数据,当ISAPI运行时,通过NT中任务管理器察看机器性能,
CPU使用率舜时达到100%,当多个用户请求时,CPU使用率始终为100%。对于客户端
而言,需要几秒钟启动该ISAPI一次,该如何处理以减少服务器负荷。
程序代码如下:
if (Request.QueryFields.Values['num']='yc') then
begin
AssignFile(data_file,'C:/inetpub/wwwroot/interface/yc.ini');
reset(data_file);
end
else
begin
AssignFile(data_file,'C:/inetpub/wwwroot/interface/yx.ini');
reset(data_file);
end;

para_num:=0;
while(eof(data_file)=false)do
begin
readln(data_file,temp_str);
for i:=0 to Request.QueryFields.count-1 do
begin
v_name:='T'+inttostr(i);
if (pos(Request.QueryFields.Values[v_name],temp_str)= 1 )then //寻找匹配的文本
begin
response.content:=response.content+#10+temp_str;
para_num:=para_num+1;
break;
end;
end;
if (para_num>=Request.QueryFields.count-1) then
break;
end;
CloseFile(data_file);

 
你这样写肯定的了。没说的。
实际上你不及写到数据库中去,我想数据库的查询可能比你这样一行一行查找有效得多。
 
有几种方法
1:使用内存印象文件
2:使用windows2000提供的异步文件读写方式
 
不要使用 readln 和 assignfile 之类的文本文件函数。如果对这个文件使用数据库,
我想速度反而会下降,不如你把每一行都做成等宽的数据(比如一行 160 字符,后面
补空格),然后使用 tmemorystream,每次就可以用
read(dwLineCount * dwLineWidth, lpBuffer) 读到字符串里。这样应该有很好的性能。
 
可以建立一个数组,然后把该文本文件全部读入数组
 
多人接受答案了。
 
后退
顶部