Заполнение
ObjectList Выполнено за:4,4246 сек.
BufDataset1 Выполнено за:8,5468 сек.
//Построчная математическая операция
ObjectList Выполнено за:0,8511 сек.
BufDataset1 Выполнено за:0,0460 сек.
//Математическая операция в случайном порядке
ObjectList Выполнено за:12,3523 сек.
BufDataset1 Выполнено за:0,8177 сек.
Математические операции порадовали и удивили, ибо при ручной отрисовке RxDBGrid мне показалось что работа с BufDataset дольше, чем тоже самое но на основе классов. А тут деление, сложение быстрее проходит. А вот заполнение буфера по скорости в два раза медленнее. На малых объемах это не заметно, но чем больше строк, тем больше разрыв.
Внимание, вопрос - а есть какие то ухищрения это исправить?
- Код: Выделить всё
- procedure TForm1.Button1Click(Sender: TObject);
 var
 i:integer;
 aObject:TAssiBasicObjectItem;
 iCounterPerSec,C1,C2 :TLargeInteger;
 begin
 randomize;
 QueryPerformanceFrequency(iCounterPerSec);
 QueryPerformanceCounter(C1);
 for i := 0 to SpinEdit1.Value - 1 do
 begin
 aObject:=TAssiBasicObjectItem.Create;
 aObject.SetParameter('id',i);
 aObject.SetParameter('name','name');
 aObject.SetParameter('value',i);
 Collection.add(aObject);
 end;
 QueryPerformanceCounter(C2);
 memo1.Lines.Add('ObjectList Выполнено за:'+FormatFloat('0.0000', (C2 - C1) / iCounterPerSec) + ' сек.');
 BufDataset1.DisableControls;
 QueryPerformanceFrequency(iCounterPerSec);
 QueryPerformanceCounter(C1);
 for i := 0 to SpinEdit1.Value - 1 do
 begin
 BufDataset1.Append;
 BufDataset1.FieldByName('id').AsInteger:=i;
 BufDataset1.FieldByName('name').AsString:='name';
 BufDataset1.FieldByName('value').AsInteger:=i;
 BufDataset1.Post;
 end;
 QueryPerformanceCounter(C2);
 BufDataset1.EnableControls;
 memo1.Lines.Add('BufDataset1 Выполнено за:'+FormatFloat('0.0000', (C2 - C1) / iCounterPerSec) + ' сек.');
 end;
- Код: Выделить всё
- procedure TForm1.Button2Click(Sender: TObject);
 var
 e1,e2,
 i:integer;
 aObject:TAssiBasicObjectItem;
 //test
 iCounterPerSec,C1,C2 :TLargeInteger;
 begin
 randomize;
 e1:=0;
 QueryPerformanceFrequency(iCounterPerSec);
 QueryPerformanceCounter(C1);
 for i := 0 to Collection.Count - 1 do
 begin
 aObject:=Collection.Items[i];
 e2:=aObject.GetParameter('value');
 e1:=e1+(e2 div 2);
 end;
 QueryPerformanceCounter(C2);
 memo1.Lines.Add('ObjectList Выполнено за:'+FormatFloat('0.0000', (C2 - C1) / iCounterPerSec) + ' сек.');
 BufDataset1.DisableControls;
 e1:=0;
 QueryPerformanceFrequency(iCounterPerSec);
 QueryPerformanceCounter(C1);
 BufDataset1.First;
 while not BufDataset1.EOF do
 begin
 e2:=BufDataset1.FieldByName('value').AsInteger;
 e1:=e1+(e2 div 2);
 BufDataset1.Next;
 end;
 QueryPerformanceCounter(C2);
 BufDataset1.EnableControls;
 memo1.Lines.Add('BufDataset1 Выполнено за:'+FormatFloat('0.0000', (C2 - C1) / iCounterPerSec) + ' сек.');
 end;




 
 