我有一个应用程序,它从 Excel 中获取数据表,并将其导入我的嵌入式SpreadsheetGear.WorkbookView
. 我知道 Excel 中工作表大小的限制,但我想知道 Excel 是否能够处理大于SpreadsheetGear
. 有没有人遇到过这个?
杰克
我有一个应用程序,它从 Excel 中获取数据表,并将其导入我的嵌入式SpreadsheetGear.WorkbookView
. 我知道 Excel 中工作表大小的限制,但我想知道 Excel 是否能够处理大于SpreadsheetGear
. 有没有人遇到过这个?
杰克
我刚刚对在 .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);
}
}
}