type
TMyRecord = record
Rect:TRectangle;
Text:TLabel;
end;
и переменную
m:array of TMyRecord;
По нажатию на одну кнопку выполняю код
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
t1,t2:TDateTime;
L:TLabel;
R:TRectangle;
begin
t1:=Now;
SetLength(m,1000);
BeginUpdate;
for I := Low(m) to High(m) do
begin
R:=TRectangle.Create(ScrollBox1);
R.Parent:=ScrollBox1;
R.ClipChildren:=true;
L:=TLabel.Create(R);
L.Text:='Это строка №'+IntToStr(i);
L.Parent:=R;
m[i].Rect:=R;
m[i].Text:=L;
R:=nil;
L:=nil;
end;
EndUpdate;
Application.ProcessMessages;
t2:=Now;
ShowMessage('Начало в: '+DateTimeToStr(t1)+#13+
'Завершение в: '+DateTimeToStr(t2)+#13+
'Прошло:'+IntToStr(MilliSecondsBetween(t2,t1))+'мс');
end;
по нажатию на вторую кнопку - очищаю
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for I := Low(m) to High(m) do
begin
m[i].Rect.Free;
m[i].Rect:=nil;
m[i].Text:=nil;
end;
SetLength(m,0);
end;
Вопрос:
При первом нажатии на первую кнопку процесс может занимать 400мс, при втором нажатии (после очистки) 1200мс и так по возрастающей. Почему повторное создание всегда дольше первого?
P.S. Приведенный код создан специально для примера (по аналогии с реально используемым). В реально мною используемом коде первое создание 300мс а последующие могут достигать и 3000мс (что в 10 раз дольше). Может чтото нужно сделать дополнительно после очистки?
Вопрос
NesDmitrijj
Здравствуйте!
Имею некую структуру типа record
type TMyRecord = record Rect:TRectangle; Text:TLabel; end;и переменную
По нажатию на одну кнопку выполняю код
procedure TForm1.Button1Click(Sender: TObject); var i:integer; t1,t2:TDateTime; L:TLabel; R:TRectangle; begin t1:=Now; SetLength(m,1000); BeginUpdate; for I := Low(m) to High(m) do begin R:=TRectangle.Create(ScrollBox1); R.Parent:=ScrollBox1; R.ClipChildren:=true; L:=TLabel.Create(R); L.Text:='Это строка №'+IntToStr(i); L.Parent:=R; m[i].Rect:=R; m[i].Text:=L; R:=nil; L:=nil; end; EndUpdate; Application.ProcessMessages; t2:=Now; ShowMessage('Начало в: '+DateTimeToStr(t1)+#13+ 'Завершение в: '+DateTimeToStr(t2)+#13+ 'Прошло:'+IntToStr(MilliSecondsBetween(t2,t1))+'мс'); end;по нажатию на вторую кнопку - очищаю
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for I := Low(m) to High(m) do begin m[i].Rect.Free; m[i].Rect:=nil; m[i].Text:=nil; end; SetLength(m,0); end;Вопрос:
При первом нажатии на первую кнопку процесс может занимать 400мс, при втором нажатии (после очистки) 1200мс и так по возрастающей. Почему повторное создание всегда дольше первого?
P.S. Приведенный код создан специально для примера (по аналогии с реально используемым). В реально мною используемом коде первое создание 300мс а последующие могут достигать и 3000мс (что в 10 раз дольше). Может чтото нужно сделать дополнительно после очистки?
5 ответов на этот вопрос
Рекомендуемые сообщения