我有一个应用程序从Excel中获取数据表,并将其导入我的嵌入式SpreadsheetGear.WorkbookView
。我知道Excel中工作表大小的限制,但我想知道Excel是否能够处理大于SpreadsheetGear
的数据集。有没有人遇到过这个?
杰克
答案 0 :(得分:1)
我刚刚使用SpreadsheetGear 2012测试了在.NET 4.5 x64应用程序和Excel 2013 x64 RTM上运行的.NET,它们都运行在带有超频Core i7-980X的Windows 8 x64上。
我使用公式“= RAND()”创建了一个包含1000万个公式(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更快地创建和计算大型工作簿这一事实 - 至少在这种情况下
您可以下载免费评估SpreadsheetGear for .NET here。
免责声明:我拥有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);
}
}
}