Delphi ist bei der Anzeige von Daten viel performanter als .NET

29/09/2008 - 16:03 von Norbert Pürringer | Report spam
Hallo Leute,

ich hab zwei Testtools geschrieben, die Datensàtze aus einer Tabelle
in einer DataGrid Komponente anzeigen sollen. Das eine Testtool ist in
C# geschrieben, das andere in Delphi. Beide besitzen dieselben
Funktionen, nur verwendet C# ADO.NET und Delphi das "alte" ADO-Modell.

Ein Testfall benutzt eine Tabelle aus einer Access-Datenbank bestehend
aus etwa 60.000 Datensàtzen. C# benötigte etwa 3 Sekunden, um die
Datensàtze in der Komponente anzuzeigen.

Dasselbe Tool habe ich nochmals erstellt, nur diesmal in der Sprache
Delphi. Hier wird ADO verwendet und ebenfalls eine DataGrid Komponente
zur Anzeige von Datensàtzen benutzt. Hier dauerte die Anzeige von
60.000 Datensàtzen lediglich 0,7 Sekunden.

Auch bei Oracle Daten war Delphi 2 bis 3x so schnell als .NET.

Den großen Performancegewinn hat Delphi bei der Art und Weise, wann
die Daten angezeigt werden. Es werden nàmlich nur jene Datensàtze aus
der Datenbank geholt, die gerade im sichtbaren Bereich des DataGrids
sind (dieses Verhalten wird von TDataSet abgekapselt). Delphi ist
somit stàndig in Verbindung mit der Datenbank, um bei Bedarf Daten
nachzuladen (also, wenn die Scrollleiste des DataGrids hin- und
herbewegt wird). C# kopiert hingegen alle Datensàtze in ein DataTable
Objekt und dann kommt es zur Anzeige. Zwar ist C# bei der Navigation
der Scrollleiste etwas performanter (und "animierter"), aber es wird
viel Zeit mit "unsichtbaren" Daten vergeudet.

Habt ihr auch die Erfahrung gemacht, dass Delphi bei der Anzeige von
Datenbank-Daten viel performanter ist als C#? Oder kennt ihr
irgendwelche Tricks, wie man C# an die Leistung von Delphi
heranbringen könnte?

Gruß,
Norbert
 

Lesen sie die antworten

#1 Joachim Duerr (ADS)
29/09/2008 - 16:37 | Warnen spam
Norbert Pürringer wrote:

Habt ihr auch die Erfahrung gemacht, dass Delphi bei der Anzeige von
Datenbank-Daten viel performanter ist als C#? Oder kennt ihr
irgendwelche Tricks, wie man C# an die Leistung von Delphi
heranbringen könnte?



stelle in deiner ADO-Connection die CursorLocation auf clUseClient und
du hast denselben Effekt;)
ADO.NET kennt keine serverseitigen Cursor. Das kann man so einfach auch
nicht umgehen (außer, du nimmst ADS und den AdsExtendedReader).
Microsoft meint, das ist nicht notwendig.

Joachim Duerr
Advantage Presales
Sybase GmbH
!!! please reply to newsgroups only !!!

Ähnliche fragen