1

我有一个应用程序,它从 Excel 中获取数据表,并将其导入我的嵌入式SpreadsheetGear.WorkbookView. 我知道 Excel 中工作表大小的限制,但我想知道 Excel 是否能够处理大于SpreadsheetGear. 有没有人遇到过这个?

杰克

4

1 回答 1

1

我刚刚对在 .NET 4.5 x64 应用程序和 Excel 2013 x64 RTM 上运行的 SpreadsheetGear 2012 进行了测试,两者都在具有超频 Core i7-980X 的 Windows 8 x64 上运行。

我创建了一个包含 1000 万个公式(使用公式“=RAND()”的 1,000,000 行和 10 列)的工作簿。

Excel 2013 在 20.18 秒内创建了工作簿,使用了 795MB 的 RAM,计算时间为 0.39 秒。

SpreadsheetGear 2012 在 0.42 秒内创建了工作簿,使用了 153MB 的 RAM,并在 0.09 秒内完成了计算。

SpreadsheetGear 仅受内存量的限制,在内存使用方面显然比 Excel 2013 更有效,更不用说 SpreadsheetGear 2012 创建和计算大型工作簿的速度比 Excel 2013 更快 - 至少在这种情况下是这样。

您可以在此处下载适用于 .NET 的 SpreadsheetGear 的免费评估。

免责声明:我拥有 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 回答