我有一个应用程序,它从 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);
}
}
}