OK daran liegt es.
Aber bei der benutzung muss man wirklich einiges beachten.
Es reicht nicht einfach nur AutoBufferCount zu setzten.
In dem Fall holt er nur zwei Zeilen.
Das liegt an dem AutoActivate. Dabei fängt er direkt an Daten im Grid einzutragen, nachdem die erst Zeile in die MemTable kommt.
Er ignoriert das DisableControls einfach mal, wenn es nach dem memtable.Active:=true kommt.
Setzt man AutoBufferCount auf False und BufferCount auf 10001,
Macht er es irgendwann, aber es dauert 10-20 Minuten bis er was anzeigt.
Im Code Beispiel setze ich das AutoActivate auf false und
aktiviere erst mit
LinkGridToDataSourceBindSourceDB1.Active:=true;
die Verbindung zwischen Daten und Grid.
40 milliSek. bis zur Anzeige sind dann wirklich sehr gut.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
ti:Cardinal;
begin
Button1.Enabled:=false;
LinkGridToDataSourceBindSourceDB1.AutoActivate:=false;
LinkGridToDataSourceBindSourceDB1.Active:=false;
LinkGridToDataSourceBindSourceDB1.BufferCount:=-1;
LinkGridToDataSourceBindSourceDB1.AutoBufferCount:=true;
with FDMemTable1 do
begin
DisableControls; //WICHTIG muss vor dem Aktivieren schon deaktiviert sein wenn AutoActivate=true!
Active:=true;
for i := 0 to 10000 do
begin
Append;
FieldByName('id').AsInteger:=i;
FieldByName('test').AsString:='asdsadasdasdasd';
Post;
end;
First;
EnableControls;
Memo1.Lines.Add(IntToStr(BindSourceDB1.DataSet.RecordCount));
end;
ti:=GetTickCount;
LinkGridToDataSourceBindSourceDB1.Active:=true;
ti:=GetTickCount-ti;
Memo1.Lines.Add('zeit: ' + IntToStr(ti)+ ' msek');
Button1.Enabled:=true;
end;
Unter XE3 geht das ganze fast genauso schnell,
Dort waren es 70ms im Durchschnitt.
Wär ja mal was für EMBA darauf hinzuweisen, bei Daten über 200 Records es einiges zu beachten gilt.