Hat jemand .Net Excel-IO-Komponente benchmarks?
-
08-06-2019 - |
Frage
Ich bin benötigen, um Zugriff auf Excel-Arbeitsmappen aus .Net.Ich weiß alles über die verschiedenen Möglichkeiten, es zu tun (ich geschrieben habe, Sie in eine blog post), und ich weiß, dass die Verwendung eines nativen .Net-Komponente ist die Schnellste.Aber die Frage ist, welche der Komponenten gewinnt?Hat jemand benchmarked Sie?Ich habe mit Syncfusion XlsIO, aber es ist sehr langsam für einige wichtige Operationen (wie das löschen von Zeilen in einer Tabelle mit tausenden von Benannten Bereichen).
Lösung
Ich bin noch nicht ordnungsgemäße benchmarks, aber ich versuchte es mit mehreren anderen Komponenten,und gefunden, dass SpreadsheetGear erheblich schneller als XlsIO, die ich war mit, bevor Sie.Die ich geschrieben habe, einige meiner Erkenntnisse in dieser post
Andere Tipps
Kann nicht helfen, Sie mit Ihrer ursprünglichen Frage, aber sind Sie sich bewusst, dass Sie Zugriff auf Excel-Dateien mit einer OleDbConnection, und deshalb behandeln Sie es als eine Datenbank?Sie können dann Lesen Arbeitsblätter in eine DataTable, führen Sie alle änderungen, die Sie benötigen, um die Daten in Ihrer Anwendung, und speichern Sie es zurück zu Sie die Datei mithilfe eines OleDbConnection.
Ja, aber ich werde nicht, Sie zu veröffentlichen beide aus Höflichkeit Syncfusion (Sie Fragen, Sie nicht zu veröffentlichen benchmarks), weil ich bin kein erfahrener tester so meine tests sind wohl etwas mangelhaft, aber vor allem, weil das, was Sie tatsächlich benchmark macht einen riesigen Unterschied, wer gewinnt, und um wie viel.
Ich nahm eine Ihrer "performance" - Beispiele und fügte hinzu, die gleiche routine in EPPlus zu vergleichen.XLSIO wurde um 15% schneller bei nur einfache Einsätze, abhängig von der Zeilen - /Spalten-Verhältnis (ich habe versucht, ein paar), die Speicherauslastung schien sehr ähnlich.Wenn ich habe eine routine, die, nachdem die Zeilen Hinzugefügt wurden, gelöscht jedem 10ten Zeile und dann einlegen einer neuen Zeile 2 Zeilen nach oben aus, dass XLSIO war deutlich langsamer der Fall.
Eine generische Benchmarking ist ziemlich viel nutzlos für Sie.Sie müssen versuchen, Sie gegeneinander in den jeweiligen Szenarien, die Sie verwenden.
Ich verwende EPPlus für ein paar Jahre, und die performance war in Ordnung, ich erinnere mich nicht, schrie es.
Mehr in Betracht, ist die Funktionalität, die Unterstützung (Syncfusion gut gewesen, in meiner Erfahrung), Dokumentation, Zugriff auf den source-code ein, wenn das wichtig ist, und - wichtiger - wie viel Sinn die API ermöglicht Ihnen, die syntax, kann sehr unterschiedlich sein.zB.Benannte Stile
XLSIO
headerStyle.BeginUpdate();
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33);
headerStyle.Font.Bold = true;
headerStyle.Borders[ExcelBordersIndex.EdgeLeft] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeTop] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
headerStyle.EndUpdate();
EPPlus
ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle");
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Style.Font.Bold = true;
headerStyle.Style.Border.Left.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Right.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Top.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;