Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: TADODataset durchscrollen wird immer langsamer

  Alt 12. Okt 2006, 14:16
Gute Idee mit dem Cursor, das merke ich mir mal für später: Allerdings steht der cursor auf clUseClient.
Ich vermute mal, das die Implementierung des _Recordsets (MS) an der Stell suboptimal ist, und z.B. bei einem .Next immer von vorne anfängt zu suchen.

Ich erwähnte, das die ZUNAHME linear ist, das deutet aber auf ein quadratisches (polynomiales) Laufzeitverhalten hin. Ergo dürfte eine hirnkranke Implementierung wie oben wirklich der Grund sein.

Alles andere würde eine konstant langsame Ausführung bedeuten (Speicher, Cursorlocation etc.), weil eben pro Datensatz eine gewisse Verzögerung auftritt. Hier habe ich jedoch die Befürchtung, das daran liegt.

[EDIT]
Hab die Lösung:
Dataset.DisableControls; Man lernt nie aus.

Hier der Code zum Beweis, das wirklich keine Datasource oder etwas anderes daran beteiligt war:
Delphi-Quellcode:
Var
  t: Cardinal;
  n: Integer;
  d: TAdoDataset;

Begin
  d := TAdoDataset.create(Nil);
  d.ConnectionString :=
    'FILE NAME=C:\Programme\Gemeinsame Dateien\System\Ole DB\Data Links\PVIP.UDL';
  d.CommandText := 'select * from Production';
  d.DisableControls; // So benötigt es 0.8sec, sonst 38sec !!!!
  t := GetTickCount;
  d.Open;
  n := 0;
  While Not d.eof Do Begin
    inc(n);
    If n Mod 1000 = 0 Then
      memo1.lines.add(format('%d %d', [n, GetTickCount - t]));
    d.Next;
  End;
  d.EnableControls;
End;
Ist das nicht bescheuert? Das DisableControls etwas bewirkt, obwohl überhaupt keine Controls da sind?

So, Microsoft ist unschuldig und Borland hat den bösen Buben.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat