Dakle, pitanje je zašto je značajno sporiji pristup Items.Count ili Items[k] kod ComboBox-a, nego što je to kod StringLista?
Evo primera programa, koji iste stvari radi sa ComboBoxom i StringListom. Kod mene prva petlja radi oko 800 ms, druga 1900, a treća i četvrta po 0 ms.
Koristim Delphi 10.2.
unit Main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Diagnostics, Vcl.StdCtrls;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var
ComboBox : TComboBox;
StringList : TStrings;
i,j,k : Integer;
Stopwatch : TStopwatch;
begin
StringList := TStringList.Create;
StringList.Add('1');
ComboBox := TComboBox.Create(Self);
ComboBox.Parent := Form1;
ComboBox.Items.Add('1');
Stopwatch := TStopwatch.StartNew;
j:=0;
for i:=1 to 1000000 do
j := j + ComboBox.Items.Count;
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));
Stopwatch := TStopwatch.StartNew;
j:=0;
for i:=1 to 1000000 do
j := j + StrToInt(ComboBox.Items[0]);
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));
Stopwatch.Reset;
j:=0;
for i:=1 to 1000000 do
j := j + StringList.Count;
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));
Stopwatch.Reset;
j:=0;
for i:=1 to 1000000 do
j := j + StrToInt(StringList[0]);
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));
ComboBox.Free;
StringList.Free;
Close;
end;
end.