Der (Microsoft) Office Doktor und Softwarearchitekt

Hinweise, Tipps und Tricks für Microsoft Office VBA Entwickler

Ladezeiten im DataGridView

Als alter VBA-Entwickler bin ich immer noch begeistert von dem, was Microsoft Access so alles bietet. Anders als in VB 6, dem alten DataGrid in .NET 1.1 und der aktuellen DataGridView in .NET 2.0/3.0 kann die Listbox in Microsoft Access riesige Datenmengen anzeigen ohne auch nur mit der sprichwörtlichen Wimper zu zucken.

Beim Ladevorgang werden die Daten dabei Stück für Stück eingelesen, so dass sich die ersten Zeilen der Listbox augenscheinlich sofort füllen. Der Anwender hat den Eindruck, die Daten wären nach nur wenigen Millisekunden bereits verfügbar. Und tatsächlich kann der Anwender bereits mit den Daten arbeiten. Er kann beispielsweise eine Zeile markieren oder einen Bildlauf auf die Liste ausführen, obwohl im Hintergrund noch Daten nachgeladen werden.

Die DataGridView arbeitet leider nicht so. Das hat damit zu tun, dass das ganze .NET Framework auf die Arbeit mit Offline-Daten ausgelegt ist. Die DataGridView selbst kann Daten sehr performant anzeigen. Das rührt daher, dass sie als Datenquelle Daten aus bereits vorhandenen (!) Objekten erwartet, die eine der Schnittstellen IList, IListSource, IBindingList oder IBindingListView implementiert haben. Sobald man ein entsprechendes Objekt als Datenquelle ankoppelt, braucht die DataGridView die im Objekt gespeicherten Daten nur noch auf den Bildschirm zu zeichnen.

Das Problem ist also immer das Laden der Daten vom Speichermedium in den Arbeitsspeicher (also in das entsprechende Objekt, wie z.B. eine DataTable oder ein Array). Der gesamte Vorgang besteht also aus zwei Schritten: Erst die Daten in das Objekt laden, dann das Objekt an die DataGridView binden. Der Anwender hat dabei den Eindruck als stünde jemand auf der Leitung.

Daher habe ich mich entschieden, den Anwender mit einem Trick zu vertrösten. Ich teile die Arbeit auf und lade zunächst nur 100 Datensätze in das Objekt, die dem Anwender anschliessend in der DataGridView präsentiert werden. Während dieser dann schon mal beginnt, sich mit den Daten zu beschäftigen, lade ich einfach die komplette Datenmenge und stelle die DataGridView.DataSource dann noch einmal neu ein.

Natürlich ist das keinesfalls die eierlegende Wollmilchsau. Die Praxis zeigt aber, dass die Anwender gut mit diesem Trick leben können. Letzendlich dauert es meist nur einige Sekunden, bis die volle Datenmenge geladen ist. Solange ist man allemale mit dem ersten Eindruck auf dem Bildschirm beschäftigt.

Wer sich näher mit der Performance-Problematik bei DataGridViews beschäftigen möchte sei noch auf zwei interessante Seiten im www hingewiesen:

René Brunner zeigt, wie man beliebig große Daten performant verarbeiten kann (Ich selbst konnte mich mit dieser Lösung nicht anfreunden, weil man unendlich viel codieren muss)

http://megos.wordpress.com/2008/07/19/die-millionen-datagridview 

Frank Dzaebel zeigt, wie performant die DataGridView selbst bei großen Mengen wie 200.000 Zeilen noch ist. Zu berücksichtigen ist dabei allerdings, dass er die Daten nicht von der Festplatte in ein Objekt lädt, sondern OnTheFly im Arbeitsspeicher in einem Array erzeugt. Daher war auch dieser Ansatz für mich nicht relevant. Trotzdem eine sehr schöne Recherche, wie ich finde.

http://dzaebel.net/DgvVirtual.htm

Copyright © 2010 by: Der (Microsoft) Office Doktor und Softwarearchitekt • Design by: BlogPimp / Appelt Mediendesign • Lizenz: Creative Commons BY-NC-SA.


Michael Scholz

Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Microsoft Office Makros
Microsoft Office AddIns
Microsoft Office VBA
Microsoft Office Programmierung
Microsoft Office Entwicklung
Microsoft Word Excel Powerpoint Access
Microsoft Word
Microsoft Excel
Microsoft Powerpoint
Microsoft Access
Access Programmierung
Word Programmierung
Excel Programmierung 
Powerpoint Programmierung

Office Doktor Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Office Doktor Microsoft Office Makros
Office Doktor Microsoft Office AddIns
Office Doktor Microsoft Office VBA
Office Doktor Microsoft Office Programmierung
Office Doktor Microsoft Office Entwicklung
Office Doktor Microsoft Word Excel Powerpoint Access
Office Doktor Microsoft Word
Office Doktor Microsoft Excel
Office Doktor Microsoft Powerpoint
Office Doktor Microsoft Access
Office Doktor Access Programmierung
Office Doktor Word Programmierung
Office Doktor Excel Programmierung 
Office Doktor Powerpoint Programmierung

Softwarearchitekt Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Softwarearchitekt Microsoft Office Makros
Softwarearchitekt Microsoft Office AddIns
Softwarearchitekt Microsoft Office VBA
Softwarearchitekt Microsoft Office Programmierung
Softwarearchitekt Microsoft Office Entwicklung
Softwarearchitekt Microsoft Word Excel Powerpoint Access
Softwarearchitekt Microsoft Word
Softwarearchitekt Microsoft Excel
Softwarearchitekt Microsoft Powerpoint
Softwarearchitekt Microsoft Access
Softwarearchitekt Access Programmierung
Softwarearchitekt Word Programmierung
Softwarearchitekt Excel Programmierung 
Softwarearchitekt Powerpoint Programmierung