Contextlớn bộ nhớ phân bổ khi sử dụng Thư viện EPPlus Excel
tôi đã được sử dụng như một công cụ EPPLUS của tôi để tự động excel tạo báo cáo, sử dụng C# là ngôn ngữ khách hàng của thư viện.
Vấn đề:
Sau khi cố gắng viết một báo cáo thực sự lớn (phản ứng của một truy vấn SQL), với các bảng tổng hợp, biểu đồ và vân vân, tôi sẽ chỉ có một Out of Memory Exception
.
xử lý sự cố
Để khắc phục sự cố, tôi quyết định mở một báo cáo hiện có 138MB, và sử dụng đối tượng GC
để cố gắng tham gia một peek vào những gì đang xảy ra với bộ nhớ của tôi, và đây là kết quả .
ExcelPackage pkg = new ExcelPackage (new FileInfo (@"PATH TO THE REPORT.xlsx"));
ExcelWorkbook wb = pkg.Workbook;
Kết quả thu thập rác, trước dòng thứ hai của mã và sau đó.
Vì vậy, tôi không biết phải làm gì từ bây giờ trở đi. Tất cả tôi đang làm là mở báo cáo, đó là tiêu thụ roughtly 10 (9,98 thực sự) lần kích thước báo cáo chính nó, trên bộ nhớ.
~ 138MB tệp excel, chiếm 1.370.817.264 byte RAM.
Cập nhật One:
Có một khá gần đây beta version of EPPlus đó là ra rằng có trên đó là changelog:
New Cell store
* Less memory consumtion
* Insert columns (not on the range level)
* Faster row inserts
Sau khi cập nhật các NuGet, tôi vẫn có cùng một ngoại lệ, đó là ném sau dòng đầu tiên, thay vì được nâng lên trên dòng thứ hai.
Tôi vừa trích xuất báo cáo ~ 138MB (.xlsx) và kết quả là có 0,99 GB trên đĩa. Bạn có thể nghĩ ra cách nào rẻ hơn để làm việc này không? –
@MarcelloGrechiLins Bạn có thể tự tạo các tài liệu XML bằng cách sử dụng các luồng thay vì có toàn bộ nội dung của chúng trong bộ nhớ cùng một lúc. Tại một số điểm bạn sẽ phải nén tất cả lên, bạn có thể sử dụng một thư viện xử lý các tệp lớn hơn mặc dù để xử lý phần đó. Thật không may, bạn sẽ bỏ lỡ tính dễ sử dụng của Excel. Tôi đoán vấn đề thực sự là "tại sao bạn có các tài liệu Excel lớn như vậy" ?! – mason
@ mason Tôi đang thực hiện dự án cho một trong những công ty viễn thông "Big Four" của Brazil (không thể nói tên của nó). Báo cáo này, chịu trách nhiệm cho thấy một tập hợp con của các khách hàng của nó, như bạn mong đợi, là rất lớn. –