Сравнете три безплатни библиотеки, за да разберете коя е най-добрата

Управлението на статистическите данни е основен приоритет, когато става въпрос за развитие на системата.

Много хора разчитат на Excel като техен инструмент за управление на данни.

С непрекъснатия растеж на компанията, данните в нейната база данни също се увеличиха.

Виждали ли сте някога, че когато щракнете върху бутона за генериране на отчет, вашата имейл кутия винаги е безшумна?

Има две често срещани причини за бавна работа. Първата причина е бавното извличане на данни от заявката от базата данни, а втората е бавно при запис в Excel.

В тази статия ще използвам някои генерирани библиотеки на Excel, за да сравня най-бързите в различните количества данни.

Представете кои библиотеки ще използвам

1.LargeXlsx

Това е минималистична, но богата на функции библиотека, написана на C#, насочена към .net стандарт 2.0, предоставяща прости примитиви за запис на Excel файлове във формат XLSX по поточен начин, така че потенциално огромни файлове да могат да бъдат създадени, докато консумират малко, постоянно количество памет.

salvois/LargeXlsx: .net библиотека за запис на големи Excel файлове във формат XLSX с ниска консумация на памет, използвайки поточно записване. (github.com)

2.MiniExcel

MiniExcel е прост и ефективен, за да избегнете инструмента за обработка на .NET Excel на OOM.

Понастоящем повечето популярни рамки трябва да заредят всички данни в паметта, за да улеснят работата, но това ще доведе до проблеми с консумацията на памет. MiniExcel се опитва да използва алгоритъм от поток, за да намали първоначалните 1000 MB заетост до няколко MB, за да избегне OOM (недостиг на памет).

мини-софтуер/MiniExcel: Бърз, с малко памет, лесен Excel .NET помощник за импортиране/експортиране/шаблонна електронна таблица (github.com)

3.ClosedXml

ClosedXML е .NET библиотека за четене, манипулиране и писане на Excel 2007+ (.xlsx, .xlsm) файлове. Той има за цел да предостави интуитивен и удобен за потребителя интерфейс за работа с основния API на OpenXML.

ClosedXML/ClosedXML: ClosedXML е .NET библиотека за четене, манипулиране и писане на Excel 2007+ (.xlsx, .xlsm) файлове. Той има за цел да предостави интуитивен и удобен за потребителя интерфейс за работа с основния OpenXML API. (github.com)

Тестовите подходи

Дадени са три количества данни за създаване на Excel и сравняване на завършеното време и използване на паметта.

Excel ще бъде изпълнен с 20 колони и различен брой редове.

  • Олекотени данни: Един ред с данни на лист по-малко от десет хиляди
  • Данни със средна тежест: Един ред с данни на лист за триста хиляди
  • Тежки данни: Ограничение за един ред с данни на лист, около един милион

Ще използвам известния пакетен бенчмарк за измерване на процесорното време и паметта.

Хардуер: Intel CPU I7–12700, 1 CPU, 20 логически и 14 физически ядра

ОС: Windows

Dotnet версия: .NET 7

Резултат от тест

Както можете да видите на фигурата по-долу, отгоре надолу, редът на тестване е

  • =› 10 000 реда данни
  • LargeXlsx — означава 80,53 ms и разпределени 26,64 MB
  • MiniXlsx — означава 112,98 ms и разпределени 108,26 MB
  • ClosedXML — означава 802 ms и разпределени 517 MB
  • =› 300 000 реда данни
  • LargeXlsx — означава 1,8 s и разпределени 765,25 MB
  • MiniXlsx — означава 2,8 s и разпределени 2,9 GB
  • ClosedXML — означава 22,7 s и разпределени 15,8 GB
  • =› 1 000 000 реда данни
  • LargeXlsx — означава 6,2 s и разпределени 2,6 GB
  • MiniXlsx — означава 9,7 s и разпределени 9,7 GB
  • ClosedXML — означава 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++;
}

LargeXlsx/src/LargeXlsx/Worksheet.cs на 0e51106909e564d0f1ffe4178d01295968595fa6 · salvois/LargeXlsx (github.com)

Заключение

Ако искате бързо да генерирате отчет в Excel, пакетът LargeXlsx е най-добрият избор.

И най-важното е, че е безплатно!

Пакетът също така може да стилизира съдържанието на листа, като размер на шрифта, цвят и функция за замразяване на заглавката.

Надявам се, че тази статия може да направи вашето генериране на Excel ефективно!

Можете да намерите изходния код в моя GitHub:

Jefferycheng/FastestExcelTest (github.com)