我有一個從Excel獲取數據表的應用程序,並將其導入到我的嵌入式SpreadsheetGear.WorkbookView
中。我意識到Excel中工作表大小的限制,但我想知道Excel是否能夠處理大於SpreadsheetGear
的數據集。有沒有人曾經遇到過這個?SpreadsheetGear WorkbookView中可以保存的數據量是否有限制?
傑克
我有一個從Excel獲取數據表的應用程序,並將其導入到我的嵌入式SpreadsheetGear.WorkbookView
中。我意識到Excel中工作表大小的限制,但我想知道Excel是否能夠處理大於SpreadsheetGear
的數據集。有沒有人曾經遇到過這個?SpreadsheetGear WorkbookView中可以保存的數據量是否有限制?
傑克
我只是做了與2012的SpreadsheetGear測試的.NET運行在.NET 4.5 x64的應用程序和Excel 2013的x64 RTM的Windows 8的x64與超頻酷睿i7-980X都在運行。
我使用公式「= RAND()」)創建了包含1,000萬個公式(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);
}
}
}
謝謝您的回覆!我將進一步調查爲什麼將數據導入WorkbookView導致應用程序陷入困境,因爲除了SpreadsheetGears大小限制之外,它似乎是另一個原因。但是你絕對會爲我縮小範圍。對此,我真的非常感激!無論我發現哪些內容看起來有用,我都會重新發布 – 2012-11-15 23:51:23