我怎样才能从相当慢的速度加快速度



我有以下代码用于用于邮件项目的表单。我有一个表格,可以使用其中一个字符串列表调用以添加更多联系人。这工作正常,但是当我从选择联系人"返回"并调用我的 SetupMail 时,表单上的控件实际上需要很长时间才能使用新的联系人列表进行更新for 循环的每一步大约需要 1 毫秒,当我使用 FormatDateTime('dd/mm/yyyy hh:nn:ss:zzz', Now) 写入文件时

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;

您正在执行大量字符串连接,这意味着大量内存(重新)分配。 您可以使用 TStrings.DelimiterTStrings.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.LineBreakTStrings.Text 属性:

procedure TfrmMailPrepare.SetupMail;
begin
  fMailTo.LineBreak := '; ';
  txtMailTo.Text := fMailTo.Text;
  fMailCc.LineBreak := '; ';
  txtMailCc.Text := fMailCc.Text;
  fMailBcc.LineBreak := '; ';
  txtMailBcc.Text := fMailBcc.Text;
end;

最新更新