我在用于邮件项目的表单上使用以下代码。 我有一个表单我可以使用其中一个字符串列表来添加更多联系人。这工作正常但是当我从选择联系人并返回'调用我的SetupMail时,需要很长时间才能使用新的联系人列表更新表单上的控件 当我使用写入文件的FormatDateTime('dd / mm / yyyy hh:nn:ss:zzz',现在)计时时,for循环的每一步大约需要1毫秒
procedure TfrmMailPrepare.SetupMail;
var
i: integer;
MailTo: string;
MailCc: string;
MailBcc: string;
begin
MailTo := '';
MailCc := '';
MailBcc := '';
for i := 0 to fMailTo.Count - 1 do
MailTo := MailTo + fMailTo.Strings[i] + '; ';
txtMailTo.Text := MailTo;
for i := 0 to fMailCc.Count - 1 do
MailCc := MailCc + fMailCc.Strings[i] + '; ';
txtMailCc.Text := MailCc;
for i := 0 to fMailBcc.Count - 1 do
MailBcc := MailBcc + fMailBcc.Strings[i] + '; ';
txtMailBcc.Text := MailBcc;
Refresh;
end;
答案 0 :(得分:2)
你正在进行大量的字符串连接,这意味着需要进行大量的内存(重新)分配。您可以使用TStrings.Delimiter
和TStrings.DelimitedText
属性大大简化此代码(及其开销),例如:
procedure TfrmMailPrepare.SetupMail;
begin
fMailTo.Delimiter := ';';
txtMailTo.Text := fMailTo.DelimitedText;
fMailCc.Delimiter := ';';
txtMailCc.Text := fMailCc.DelimitedText;
fMailBcc.Delimiter := ';';
txtMailBcc.Text := fMailBcc.DelimitedText;
end;
如果您需要在每个分号后面加上空格(或DelimitedText
包装每个字符串的引号),则可以改为使用TStrings.LineBreak
和TStrings.Text
属性:
procedure TfrmMailPrepare.SetupMail;
begin
fMailTo.LineBreak := '; ';
txtMailTo.Text := fMailTo.Text;
fMailCc.LineBreak := '; ';
txtMailCc.Text := fMailCc.Text;
fMailBcc.LineBreak := '; ';
txtMailBcc.Text := fMailBcc.Text;
end;