Сравнете три безплатни библиотеки, за да разберете коя е най-добрата
Управлението на статистическите данни е основен приоритет, когато става въпрос за развитие на системата.
Много хора разчитат на Excel като техен инструмент за управление на данни.
С непрекъснатия растеж на компанията, данните в нейната база данни също се увеличиха.
Виждали ли сте някога, че когато щракнете върху бутона за генериране на отчет, вашата имейл кутия винаги е безшумна?
Има две често срещани причини за бавна работа. Първата причина е бавното извличане на данни от заявката от базата данни, а втората е бавно при запис в Excel.
В тази статия ще използвам някои генерирани библиотеки на Excel, за да сравня най-бързите в различните количества данни.
Представете кои библиотеки ще използвам
1.LargeXlsx
Това е минималистична, но богата на функции библиотека, написана на C#, насочена към .net стандарт 2.0, предоставяща прости примитиви за запис на Excel файлове във формат XLSX по поточен начин, така че потенциално огромни файлове да могат да бъдат създадени, докато консумират малко, постоянно количество памет.
2.MiniExcel
MiniExcel е прост и ефективен, за да избегнете инструмента за обработка на .NET Excel на OOM.
Понастоящем повечето популярни рамки трябва да заредят всички данни в паметта, за да улеснят работата, но това ще доведе до проблеми с консумацията на памет. MiniExcel се опитва да използва алгоритъм от поток, за да намали първоначалните 1000 MB заетост до няколко MB, за да избегне OOM (недостиг на памет).
3.ClosedXml
ClosedXML е .NET библиотека за четене, манипулиране и писане на Excel 2007+ (.xlsx, .xlsm) файлове. Той има за цел да предостави интуитивен и удобен за потребителя интерфейс за работа с основния API на OpenXML.
Тестовите подходи
Дадени са три количества данни за създаване на Excel и сравняване на завършеното време и използване на паметта.
Excel ще бъде изпълнен с 20 колони и различен брой редове.
- Олекотени данни: Един ред с данни на лист по-малко от десет хиляди
- Данни със средна тежест: Един ред с данни на лист за триста хиляди
- Тежки данни: Ограничение за един ред с данни на лист, около един милион
Ще използвам известния пакетен бенчмарк за измерване на процесорното време и паметта.
Хардуер: Intel CPU I7–12700, 1 CPU, 20 логически и 14 физически ядра
ОС: Windows
Dotnet версия: .NET 7
Резултат от тест
Както можете да видите на фигурата по-долу, отгоре надолу, редът на тестване е
- =› 10 000 реда данни
LargeXlsx
— означава 80,53 ms и разпределени 26,64 MBMiniXlsx
— означава 112,98 ms и разпределени 108,26 MBClosedXML
— означава 802 ms и разпределени 517 MB- =› 300 000 реда данни
LargeXlsx
— означава 1,8 s и разпределени 765,25 MBMiniXlsx
— означава 2,8 s и разпределени 2,9 GBClosedXML
— означава 22,7 s и разпределени 15,8 GB- =› 1 000 000 реда данни
LargeXlsx
— означава 6,2 s и разпределени 2,6 GBMiniXlsx
— означава 9,7 s и разпределени 9,7 GBClosedXML
— означава 78,5 s и разпределени 52,5 GB
Независимо дали CPU време или използване на паметта, пакетът LargeXlsx
винаги изразходва най-малко CPU време и по-малко използване на паметта; тъй като данните нарастват до сто реда данни, неговата производителност все още е най-добра.
И така, защо пакетът LargeXlsx
може да има такава производителност?
Нека ви покажа изходния код в пакета LargeXlsx
.
Файлът Excel
.xlsx
се съхранява в XML формат, така че пакетът директно записва данни в StreamWriter
.
public void Write(string value, XlsxStyle style) { if (value == null) { Write(style, 1); return; } EnsureRow(); // <c r="{0}{1}" s="{2}" t="inlineStr"><is><t>{3}</t></is></c> _streamWriter.Write("<c"); WriteCellRef(); WriteStyle(style); _streamWriter.Write(" t=\"inlineStr\"><is><t>"); _streamWriter.Write(Util.EscapeXmlText(value)); _streamWriter.Write("</t></is></c>\n"); CurrentColumnNumber++; }
Заключение
Ако искате бързо да генерирате отчет в Excel, пакетът LargeXlsx
е най-добрият избор.
И най-важното е, че е безплатно!
Пакетът също така може да стилизира съдържанието на листа, като размер на шрифта, цвят и функция за замразяване на заглавката.
Надявам се, че тази статия може да направи вашето генериране на Excel ефективно!
Можете да намерите изходния код в моя GitHub: