4

我对 SpreadSheetLight 有疑问。当我使用 SaveAs 方法时,它使用大约 1.2GB 的 RAM。我写了大约 6k 条记录,输出文件只有 6MB。其他人有这个问题吗?

SaveAs 代码在这里:

using (var stream = new MemoryStream(Templates.BudgetTemplate))
{
    using (var doc = new SLDocument(stream))
    {
        doc.SelectWorksheet("Sheet");

        var i = 2; //first line is header
        var list = new List<object>(); //list initialization from DB Collection

        foreach (var item in list)
        {
            //doc.SetCellValue stuff, from A to AN columns

            i++;
        }

        doc.SaveAs(_path);
    }
}
4

1 回答 1

2

这可能与文件大小缓冲区有关。就像运行 Excel 会占用数兆字节的 RAM 以便编写 20 KB 的文件一样,SpreadsheetLight 也有类似的作用。

我们谈论的是 Open XML 电子表格,所以从技术上讲,整个 XML 文件集都保存在内存中(保存时)。例如,压缩文件时,您将整个文本文件保存在内存中,然后将其压缩成一个较小的文件。这就是 SpreadsheetLight(和其他库)比最终生成的文件占用更多 RAM 的原因。

于 2013-09-13T07:10:38.287 回答