我有一段代码运行后,CPU占用率高达100%,不知哪位能帮我看看(100分)

  • 主题发起人 主题发起人 yname2900
  • 开始时间 开始时间
Y

yname2900

Unregistered / Unconfirmed
GUEST, unregistred user!

如下代码运行后,CPU占用率高达100%,不知哪位能帮我看看
主要用途:将文件内容读入Access数据库,共计6万余条数据。

var
I:integer;
EmailList:TStrings;
begin
if ADODataSet1.Active then ADODataSet1.Close;
ADODataSet1.Open;
if assigned(EmailList) then EmailList.Free;
EmailList:=TStringList.Create;
EmailList.LoadFromFile('cn.txt');
for I := 0 to EmailList.Count-1 do
begin
ADODataSet1.Append;
ADODataSet1.fieldbyname('email').value:=EmailList.strings;
ADODataSet1.fieldbyname('stauts').value:=0;
try
ADODataSet1.post;
except
continue;
end;
end;
ADODataSet1.close;
EmailList.Free;
showmessage('完成');
end;
 
没问题。 只不过你选了一种很慢的方法而已。
不信的话你不用adodataset.append, adodataset.post而是生成sql语句用adocommand执行, 速度可以至少快3倍
 
好,我试试看
 
如何用adocommand做了?
 
我用下列代码运行,然而运行到'ADOCommand1.CommandText:=sqlstr;'这段发生错误
不知是何原因?

var
i:integer;
EmailList:TStrings;
sqlstr:string;
begin
if assigned(EmailList) then EmailList.Free;

EmailList:=TStringList.Create;
EmailList.LoadFromFile('online.sh.cn.txt');
ADOCommand1.CommandType:=cmdText;
for I := 0 to EmailList.Count-1 do
begin
sqlstr:='INSERT into maillist(email, stauts) values(''' + EmailList.strings + ''',0)';
ADOCommand1.CommandText:=sqlstr;
try
ADOCommand1.Execute;
except
continue;
end;
Application.ProcessMessages;
end;
EmailList.Free;
showmessage('完成');

end;
 
上面的问题解决了,如果要想在代码中动态生成commandtext,门都没有,
只能用添加参数的办法
但是,CPU占用率还高达100%

var
i:integer;
EmailList:TStrings;
sqlstr:string;
begin
if assigned(EmailList) then EmailList.Free;
EmailList:=TStringList.Create;
EmailList.LoadFromFile('online.sh.cn.txt');
for I := 0 to EmailList.Count-1 do
begin
ADOCommand1.Parameters[0].Value:=EmailList.strings;
ADOCommand1.Parameters[1].Value:=0;
try
ADOCommand1.Execute;
except
continue;
end;
Application.ProcessMessages;
end;
EmailList.Free;
showmessage('完成');

end;
 
做好一次性提交,不宜一条一条提交。
sql:='insert into..........;'+
'insert into..........;'+
'insert into..........;'+
'insert into..........;'
adoquery.sql.text:=sql;
adoquery.Execute;
 
加一个APPLICATION.PROCESSMESSAGES
 
后退
顶部