簡體   English   中英

優化使用 ClosedXML 讀取 XLSX 文件時的內存使用情況

[英]Optimize memory usage when using ClosedXML to read XLSX File

我有一個 XLSX 表,其中包含大約 30 列和 130,000 行。

過去我使用 OleDb 數據閱讀器來解析此類文件,但在讀取具有混合單元格數據類型的未知 Excel 文件時會出現問題。

我找到了 ClosedXML,但我遇到的問題是內存使用量比 OleDb 的情況要高得多。 我可能遺漏了一些東西,但似乎必須先加載整個工作簿,然后才能訪問單個單元格,當我想讀取單個單元格時,我的內存使用量增加了 ~500MB:

        using (XLWorkbook workBook = new XLWorkbook(_path))
        {
            IXLWorksheet workSheet = workBook.Worksheet(tableName);
            Console.WriteLine(workSheet.Cell(1, 1).Value);
        }

有沒有辦法優化這個?

  • 延遲加載細胞?
  • 將加載的單元格屬性的數量減少到感興趣的那些?
  • 任何事物?

如果沒有優化此選項的選項,您是否可以推薦任何其他框架/庫?

謝謝。

似乎必須加載整個工作簿才能訪問單個單元格,

那是對的。 這是 ClosedXML 的設計行為。 它意味着更高的內存使用率,以促進更強大的細胞操作。 如果內存使用對您來說是個問題,我建議您查看一個不同的庫,也許是 EPPlus。

內存使用可能難以避免,具體取決於文件中數據的類型。 在內部,Excel 文件使用“共享字符串”表來存儲每個字符串的單個副本,並通過工作表數據中的索引來引用這些。 我想大多數庫會在讀取任何工作表數據之前加載整個共享字符串表。 如果您的文件有很多唯一字符串,則加載整個共享字符串表可能需要一些時間和內存。

ClosedXML 是讀取 Excel 數據效率最低的庫之一。 正如弗朗索瓦所提到的,這可能並不奇怪,因為該庫旨在支持其他庫不支持的深度功能。

如果你想要的只是數據讀取功能,你可以看看我維護的一個庫: Sylvan.Data.Excel 它非常易於使用,是.NET 上最快的 Excel 數據閱讀器庫 在這個特定的基准測試中,Sylvan 比 ClosedXML 快 10 倍以上,並且使用了一小部分內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM