1

Excel からデータのテーブルを取得し、それを埋め込みの .xml にインポートするアプリケーションがありますSpreadsheetGear.WorkbookView。Excel のワークシートのサイズに制限があることは認識していますが、Excel が より大きいデータ セットを処理できるかどうか疑問に思っていましたSpreadsheetGear。これまでに誰かがこれに遭遇したことがありますか?

ジェイク

4

1 に答える 1

1

.NET 4.5 x64 アプリケーションで実行されている .NET 用の SpreadsheetGear 2012 と、オーバークロックされた Core i7-980X を搭載した Windows 8 x64 で実行されている Excel 2013 x64 RTM でテストを行いました。

1,000 万の数式 (数式 "=RAND()" を使用して 1,000,000 行と 10 列) を含むワークブックを作成しました。

Excel 2013 は 20.18 秒でブックを作成し、795 MB の RAM を使用し、0.39 秒で計算されました。

SpreadsheetGear 2012 は、ワークブックを 0.42 秒で作成し、153MB の RAM を使用し、0.09 秒で計算しました。

SpreadsheetGear はメモリの量によってのみ制限され、メモリ使用に関しては明らかに Excel 2013 よりも効率的です。言うまでもなく、SpreadsheetGear 2012 は Excel 2013 よりも高速に大きなワークブックを作成および計算します (少なくともこの場合)。

SpreadsheetGear for .NET の無料評価版は、ここからダウンロードできます。

免責事項: 私は SpreadsheetGear LLC を所有しています。

SpreadsheetGear で実行したコードは次のとおりです。

    using System;
    using SpreadsheetGear;

    namespace SpreadsheetGearMemTest
    {
        class Program
        {
            static void Test(IWorkbook workbook, int rows, int cols)
            {
                var worksheet = workbook.Worksheets[0];
                var cells = worksheet.Cells;
                var timer = System.Diagnostics.Stopwatch.StartNew();
                var startMem = System.GC.GetTotalMemory(true);
                cells[0, 0, rows - 1, cols - 1].Formula = "=RAND()";
                timer.Stop();
                var memUsed = System.GC.GetTotalMemory(true) - startMem;
                var calcTimer = System.Diagnostics.Stopwatch.StartNew();
                workbook.WorkbookSet.Calculate();
                Console.WriteLine("Creating took {0} seconds and {1}MB, calc took {2} seconds.",
                    timer.Elapsed.TotalSeconds, memUsed / (1024.0 * 1024.0), calcTimer.Elapsed.TotalSeconds);
                workbook.Close();
            }

            static void Main(string[] args)
            {
                // Get the code JITed.
                Test(Factory.GetWorkbook(), 100, 10);
                // Do the test.
                Test(Factory.GetWorkbook(), 1000000, 10);
            }
        }
    }
于 2012-11-01T22:03:21.047 に答える