Laden...

Füllen eines DataGrids performancemäßig optimieren

Letzter Beitrag vor 14 Jahren 9 Posts 2.301 Views
Füllen eines DataGrids performancemäßig optimieren

Hallo,

wir setzen ein DataTable ein, welches zur Laufzeit aus einem JSon String gefüllt wird.

  • lese Zeile aus Json
  • lege Zeile an
  • schreibe Zeile
  • usw.

Bei ca. 4000 DS dauert dies ca. 7 Sekunden.

Wie kann ich das am besten optimieren?

Nicht für das Leben, für die Arbeit lernen wir ...
Windows ist Klasse, ich nehme es um Linux zu downloaden ....

beim anlegen der zeile kann man die werte der zelle gleich mitgeben (sofern ich mich noch richtig erinnere). das dürfte die ganze sache unter umständen beschleunigen. viel verbesserungspotenziol sehe ich allerdings nciht gerade.

Hallo Toem99

Performanceoptimierungen ohne den Code zu sehen, sind recht schwierig. Vllt ist es auch nicht so günstig eine DataTable zu benutzen.. Kommt natürlich darauf an, was Du nachher noch mit den Daten machst.

Beim Strings bearbeiten kann man meist auch noch einiges herausholen, wenn man weiß wie.

Grüße

Die Frage kam auch grad in mir hoch :

Braucht man wirklich 4000 Datensätze auf einmal in einem Grid ? Möglicherweise gibt es an anderer Stelle noch Optimierungsansätze , z.B. Paging o.ä.

Ich würde einfach mal testen, wie lange die einzelnen Steps dauern (Im Schnitt)


DateTime readLineStart = DateTime.Now;
- lese Zeile aus Json
DateTime readLineEnd = DateTime.Now;

//usw...

- lege Zeile an


- schreibe Zeile

Dann siehst du, wo der Bottleneck ist. Ich vermute stark beim Einlesen der Daten. 4000 Zeilen in ein DataTable zu adden sollten recht fix gehen (Flass du da keine Blobs oder sonstige großen Datenmengen reinschreibst).

aber bitte messe nciht mit datetime sondern mit StopWatch.

Oh, wieder was gelernt. Scheint eine höhere Edit -> Resolution zu haben. Laut MSDN hat DateTime ca. 16ms. Wie hoch ist denn die von StopWatch?

Oh, wieder was gelernt. Scheint eine höhere Edit -> Resolution zu haben. Laut MSDN hat DateTime ca. 16ms. Wie hoch ist denn die von StopWatch?

das kommt ganz daruf an, was die hardware und das OS so bietet. im optimalfall verwendet es intern den performancecounter ansonsten weicht es auf den system timer aus.

wie ungefähr genau er ist, kann man mit den propertys Frequency und IsHighResolution herausfinden.

Du kannst die Datenbindung unterbrechen (abstöpseln), die DataTable befüllen und dann wieder anstöpseln.
Was auch sehr langsam ist, ist, wenn eine DGV-Spalte auf AutoSizeMode.AllCells steht.

Der frühe Apfel fängt den Wurm.