Einzelnen Beitrag anzeigen

4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#13

AW: [XE5] Firemonkey unter XE5, Einfache Datenanbindung

  Alt 25. Mär 2014, 09:05
Laut

http://stackoverflow.com/questions/1...xe5-firemonkey

schau dir mal BufferCount bzw. AutoBufferCount an.
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.
  Mit Zitat antworten Zitat