Поделиться через


Open XML ist schnell ! - Immer?

Ich habe in der Vergangenheit einige Artikel, Samples und WebCasts zum Thema Open XML bereitgestellt. Jetzt tauchte die Frage – oder vielmehr die Beobachtung – auf, dass das Einfügen von 50.000 Datensätzen á 10 Werten einige Stunden benötige. Dabei soll doch Open XML so schnell sein. Wie paßt das zusammen?

Es kommt natürlich auf den Source Code an Winking smile. Wie immer. Der in den Beispielen gezeigte Code war gedacht zum Einfügen einzelner Zellen in bestehende Tabellen. Dabei wurde Rücksicht auf viele Fälle genommen:

1. Die Zeile/Zelle existiert schon oder auch nicht
2. Es gibt vor der Zeile/Zelle oder danach weitere Zeilen/Zellen

Demensprechend verändert sich die Art und Weise Wie und vor allem Wo die Zelle bzw. Zeile eingefügt werden muss. Ich habe den Fall nachgestellt und mit dem gezeigten Beispiel 50.000 Datensätzen geschrieben. Das dauerte knapp 27 Minuten.

Danach habe ich den Code umgeschrieben. Wenn so viele Datensätzen nacheinander geschrieben werden, dann kann man davon ausgehen (oder zumindest sollte man diese Voraussetzung schaffen), dass diese Schreibvorgänge in einen leeren Bereich fallen, also erstens in der zu schreibenden Zeile noch nichts steht und es zweitens keine Zeilen nach diesem Bereich gibt, die Daten enthalten. Ein entsprechendes Template vorausgesetzt, kann jetzt ohne jegliche Prüfungen geschrieben werden. Und das spart richtig Zeit. Mit diesem Code:

SheetData sd = new SheetData();
ws.AppendChild(sd);
char c;
Row r = new Row();
for (uint i = 1; i < 50000; i++ )
{
r.RowIndex = i;
  for (int si = 65; si < 75; si++)
{
c = Convert.ToChar(si);
string cellRef = c.ToString() + i.ToString();
r.AppendChild(CreateCellWithInlineString(cellRef, "Microsoft DPE Test"));
}
sd.AppendChild(r);
r = new Row();
}
ws.Save(partWS);

habe ich die Zeit auf knapp 15 Sekunden gedrückt. Das sind gerade mal 0,9% der vorher benötigten Zeit.

Es kommt also immer darauf an, welchen Zweck der eingesetzte Code erfüllen soll und es lohnt sich, für verschiedene Einsatzgebiete angepaßte Voraussetzungen zu schaffen.