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 を実行すると 20 キロバイトのファイルを書き込むために数メガバイトの RAM が必要になるのと同じように、SpreadsheetLight も同様のことを行います。

Open XML スプレッドシートについて話しているので、技術的に言えば、XML ファイルのセット全体が (保存時に) メモリに保持されます。たとえば、ファイルを圧縮する場合は、テキスト ファイル全体をメモリに保持してから、小さいファイルに圧縮します。これが、SpreadsheetLight (およびその他のライブラリ) が最終結果のファイルよりも多くの RAM を占有する理由です。

于 2013-09-13T07:10:38.287 に答える