NPOI Apache POI의 대안 - GcExcel .NET
페이지 정보
작성자 GrapeCity 작성일 2021-08-24 09:33 조회 4,170회 댓글 0건본문
관련링크
NPOI Apache POI와 GcExcel.NET 비교
Apache POI Java API의 .NET 버전인 는 xls, doc 및 ppt 파일을 읽거나 쓸 수 있는 오픈 소스 API입니다.
(GcExcel)은 Excel에 의존하지 않는 스프레드시트 API로, 속도가 빠르고 메모리 소비량이 적습니다.
완벽한 .NET 5 지원을 바탕으로 .NET Framework, .NET Core, Mono, Xamarin에서 스프레드시트를 생성, 로드, 수정, 변환할 수 있습니다. 이 스프레드시트 API를 사용하는 응용 프로그램을 클라우드, Windows, Mac 또는 Linux에 배포할 수 있습니다. 강력한 계산 엔진과 다양한 기능을 통해 설계나 요구사항을 절충할 필요가 없습니다.
아래에 설명된 대로 철저한 성능 테스트 및 기능 비교를 통해 GcExcel이 NPOI의 대안을 모색하거나 현재 응용 프로그램의 성능 및 기능 세트를 개선하는 데 도움이 될 것으로 확신합니다.
기능 비교
다음은 NPOI가 아니라 GcExcel을 사용해야 하는 12가지 주된 이유입니다.
GcExcel은 훨씬 더 빠르고 훨씬 더 적은 메모리를 사용합니다. 여러 플랫폼에서 성능을 비교한 결과, GcExcel .NET이 NPOI보다 평균 190배 빠르고 22배 더 효율적인 것으로 나타났습니다(아래의 성능 결과 참조). 큰 범위에 대한 수식 설정과 같은 일부 작업은 100배 이상 더 빨랐습니다.
GcExcel은 셀 수식에 를 지원하는 반면, NPOI는 다양한 최신 함수를 지원하지 않아 157~280개의 계산 함수만 사용할 수 있으며 그 밖의 함수는 개발자가 구현해야 합니다.
GcExcel은 를 위한 완벽한 지원, 및 에 대한 기본 제공 지원 등 를 지원하는 반면, NPOI는 PDF로 내보내기를 지원하지 않고 예시도 제공하지 않습니다.
GcExcel은 , , , , 등 Excel VSTO API와 호환되는 을 지원하는 반면, NPOI는 조건부 서식을 지원하지 않으므로 내부용으로 표시된 하위 수준 클래스를 사용해야 합니다.
GcExcel은 , , , , , , 등 모든 최신 차트 유형을 포함하여 Excel VSTO API와 호환되는 을 지원하는 반면, NPOI는 가로 막대형, 세로 막대형, 꺾은선형, 방사형, 분산형 차트만 지원합니다.
GcExcel은 셀 안에 직접 작은 차트를 넣어 셀에서 바로 데이터를 시각화할 수 있는 및 을 지원하는 반면, NPOI는 스파크라인을 지원하지 않습니다.
GcExcel은 를 지원하는 반면, NPOI는 셰이프 또는 사진에 대한 클립보드 작업을 지원하지 않습니다.
GcExcel은 , , , 등 을 지원하는 반면, NPOI는 기본 AutoFilter만 매우 제한적으로 지원합니다.
GcExcel은 , , , , , 등 기능을 지원하는 반면, NPOI는 정렬에 대한 기본 제공 지원이 없습니다.
GcExcel은 적용, , , 등 및 이 포함된 슬라이서를 지원하는 반면, NPOI는 이러한 기능을 지원하지 않습니다.
GcExcel은 를 쉽게 지원하지만 NPOI는 이 기능을 지원하지 않습니다.
GcExcel은 를 지원하지만 NPOI에서는 이 기능을 지원하지 않습니다. 그라데이션 채우기는 셀, 셰이프, 차트 계열을 눈에 잘 띄게 표시하는 데 유용합니다.
아래 표에는 NPOI가 아니라 GcExcel을 사용해야 하는 다른 여러 가지 이유가 정리되어 있습니다.
GcExcel .NET vs. NPOI - 상세 비교 표
성능 비교
테스트 시스템 구성
Linux: CPU: 4코어 Intel(R) Xeon(R) CPU E5-2683 v3, 2.00GHz, 4GB
MacOS: Intel i9, 2.3GHz/MacOS Catalina v10.15.6
Windows: Intel(R) Core(TM) i7-8700 CPU, 3.20GHz 3.19 GHz, x64 기반 프로세서, Windows 10 Pro 20H2 Build 19042.1052.
비교에 사용한 빌드
이 비교에서는 다음 GcExcel 및 NPOI 빌드 버전을 참조합니다.
테스트 샘플
샘플을 다운로드하십시오.
테스트 데이터
처음 3개 테스트에서는 이중, 문자열, 날짜 유형의 값을 100,000개 행 x 30개 열에 채워 값 설정, 값 가져오기, XLSX로 저장, 사용된 메모리 합계(언제든지 가비지 수집이 발생할 수 있으므로 정확하게 측정하기 어려움) 등의 성능을 측정합니다.
이러한 테스트는 다음과 같습니다(문자열 테스트에서는 하드코딩된 문자열 값 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"를 사용하고 날짜 테스트에서는 new Date() 개체를 생성하며, 그 외에는 동일).
GcExcel 이중 성능 테스트
public static void TestSetRangeValues_Double(int rowCount, int columnCount, ref double setTime, ref double getTime, ref double saveTime, ref double usedMem) { Console.WriteLine(); Console.WriteLine(string.Format("GcExcel benchmark for double values with {0} rows and {1} columns", rowCount, columnCount)); IWorkbook workbook = new Workbook(); IWorksheet worksheet = workbook.Worksheets[0]; DateTime start = DateTime.Now; double[,] values =new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { values[i,j] = i + j; } } worksheet.Range[0, 0, rowCount, columnCount].Value = values; DateTime end = DateTime.Now; setTime = (end - start).TotalSeconds; Console.WriteLine(string.Format("GcExcel set double values: {0:N3} s", setTime)); start = DateTime.Now; object tmpValues = worksheet.Range[0, 0, rowCount, columnCount].Value; end = DateTime.Now; getTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel get double values: {0:N3} s", getTime)); start = DateTime.Now; workbook.Save("../../output/gcexcel-saved-doubles.xlsx"); end = DateTime.Now; saveTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel save doubles to Excel: {0:N3} s", saveTime)); }
마지막 2개 테스트에서는 계산 성능에 더 집중합니다.
다음 테스트에서는 100,000개 행 x 2개 열에 이중 값을 채운 다음 처음 2개 열에 인접해 있고 해당 열의 이중 값을 참조하는 100,000개 행 x 30개 열 범위에 수식을 설정하여 수식 설정, 계산, XLSX로 저장, 사용된 메모리 합계 등의 성능을 측정합니다.
이 테스트는 다음과 같습니다.
GcExcel 개방형 대규모 XLSX 성능 테스트
public static void TestBigExcelFile(int rowCount, int columnCount, ref double openTime, ref double calcTime, ref double saveTime, ref double usedMem) { Console.WriteLine(); Console.WriteLine(string.Format("GcExcel benchmark for test-performance.xlsx which is 20.5MB with a lot of values, formulas and styles")); IWorkbook workbook = new Workbook(); DateTime start = DateTime.Now; workbook.Open("../../files/test-performance.xlsx"); DateTime end = DateTime.Now; openTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel open big Excel: {0:N3} s", openTime)); start = DateTime.Now; workbook.Dirty(); workbook.Calculate(); end = DateTime.Now; calcTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel calculate formulas for big Excel: {0:N3} s", calcTime)); start = DateTime.Now; workbook.Save("../../output/gcexcel-saved-test-performance.xlsx"); end = DateTime.Now; saveTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel save back to big Excel: {0:N3} s", saveTime)); }
이 통합 문서는 워크시트가 계산될 때마다 재계산해야 하는 휘발성 함수를 사용하는 여러 수식이 포함된 대규모 XLSX를 로드하고 파일 열기, 계산, XLSX로 저장, 사용된 메모리 합계 등의 성능을 측정합니다.
이 테스트는 다음과 같습니다.
GcExcel 수식 성능 테스트
public static void TestSetRangeFormulas(int rowCount, int columnCount, ref double setTime, ref double calcTime, ref double saveTime, ref double usedMem) { Console.WriteLine(string.Format("GcExcel benchmark for double values with {0} rows and {1} columns", rowCount, columnCount)); IWorkbook workbook = new Workbook(); workbook.ReferenceStyle = ReferenceStyle.R1C1; IWorksheet worksheet = workbook.Worksheets[0]; double[,] values = new double[ rowCount, 2]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < 2; j++) { values[i,j] = i + j; } } worksheet.Range[0, 0, rowCount, 2].Value = values; DateTime start = DateTime.Now; worksheet.Range[0, 2, rowCount-2, columnCount].Formula = "=SUM(RC[-2],RC[-1])"; DateTime end = DateTime.Now; setTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel set formulas: {0:N3} s", setTime)); start = DateTime.Now; workbook.Calculate(); end = DateTime.Now; calcTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel calculates formula: {0:N3} s", calcTime)); workbook.ReferenceStyle = ReferenceStyle.A1; start = DateTime.Now; workbook.Save("../../output/gcexcel-saved-formulas.xlsx"); end = DateTime.Now; saveTime = (end - start).TotalSeconds;; Console.WriteLine(string.Format("GcExcel save formulas to Excel: {0:N3} s", saveTime)); }
성능 결과
다음은 입니다.
GcExcel은 Excel 파일을 로드, 수정 및 저장하는 다양한 작업에서 NPOI보다 성능이 우수합니다. 아래 수치를 확인해 보십시오.
소요 시간(초):
메모리 사용량(MB)
참고: 특정 시스템 구성에서 얻은 결과입니다. 다른 구성에서 테스트하는 경우 GrapeCity에서 수집한 결과와 값이 정확히 일치하지 않을 수 있습니다. 전반적인 성능상 불일치가 관찰되는 경우 아래에 의견을 남겨 주시기 바랍니다.
전반적으로 GcExcel이 더 빠르고 메모리 사용량이 더 적습니다. 직접 확인해 보십시오.
릴리스마다 GcExcel의 성능을 지속적으로 모니터링하고 개선해 나갈 것입니다. 다음 릴리스를 기대해 주세요!
지금 바로 GcExcel .NET Core를 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.