2014-07-03 15 views
6

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 đó.

The ammount of memory in use is too damn high

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.

Trả lời

4

Tệp Excel hiện đại, tức là các tệp Xlsx được nén zip và thường đạt được nén xuống 10%. Tôi chỉ giải nén một tập tin 1.6MB tôi tạo ra bằng cách sử dụng một công cụ tương tự và tìm thấy nó trích xuất đến 18,8 MB dữ liệu.

Bạn có tệp 0.138 GB đang sử dụng 1.370 GB bộ nhớ, gần như chính xác 10%. Các đại diện không nén trong bộ nhớ là những gì đang ăn bộ nhớ của bạn.

Nếu bạn tò mò, bạn có thể sử dụng công cụ như 7-Zip để trích xuất các tệp Xlsx hoặc bạn có thể đổi tên tệp để kết thúc bằng .zip và duyệt tệp trong Windows.

+0

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? –

+1

@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

+0

@ 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. –

Các vấn đề liên quan