EPPlus と Spreadsheet Gear の簡単なパフォーマンス テストを行って、Spreadsheet Gear の購入を正当化するような大きな違いがあるかどうかを確認しました。
私はどちらのアプリケーションの専門家でもないので、テストが最も効率的な方法で書かれていない可能性があります。
このテストでは次のことを行います。 1. 1000 行 3 列の既存の Excel ファイルを開きます。List<> に保存されるエンティティに 3 つの値を保存します。2. 新しい Excel オブジェクトを開きます。 3. 各列のタイトルを含むヘッダー行 (太字) を作成します。4. 1000 個のエンティティを書き戻します。5. 新しい Excel ファイルを保存します。
EPPlus が勝者になったらこのテストを実行すると (おおよその時間は EPPlus = 280ms、SG = 500ms)。代わりにテストを 10 回続けて実行すると (for ループの開始、コピー、10 回の個別の保存)、Spreadsheet Gear は代わりに高速になります (ファイルあたりのおおよその回数: EPPlus = 165ms、SG = 95ms)。20 回のテストの場合、おおよその時間は EPPlus = 160ms/ファイルおよび SG = 60ms/ファイルです。
(少なくともある程度は) Spreadsheet Gears は、作成するファイルが増えるほど高速になるようです。連続したテストを実行するときに EPPlus が遅い理由を誰か説明できますか? これを変更するためにコードを変更できますか?
EPPlus テスト機能:
var timer = new Stopwatch();
timer.Start();
var data = new List<Item>();
using (var excelIn = new ExcelPackage(new FileInfo(folder + fileIn)))
{
var sheet = excelIn.Workbook.Worksheets[1];
var row = 2;
while (sheet.Cells[row, 1].Value != null)
{
data.Add(new Item()
{
Id = int.Parse(sheet.Cells[row, 1].Text),
Title = sheet.Cells[row, 2].Text,
Value = int.Parse(sheet.Cells[row, 3].Text)
});
row++;
}
}
using (var excelOut = new ExcelPackage())
{
var sheet = excelOut.Workbook.Worksheets.Add("Out");
sheet.Cells.LoadFromCollection(data);
sheet.InsertRow(1, 1);
sheet.Cells[1, 1, 1, 3].Style.Font.Bold = true;
sheet.Cells[1, 1].Value = "Id";
sheet.Cells[1, 2].Value = "Title";
sheet.Cells[1, 3].Value = "Value";
excelOut.SaveAs(new FileInfo(folder + "EPPlus_" + Guid.NewGuid() + ".xlsx"));
}
timer.Stop();
return timer.ElapsedMilliseconds;
スプレッドシート ギア:
var timer = new Stopwatch();
timer.Start();
var data = new List<Item>();
var excelIn = Factory.GetWorkbook(folder + fileIn);
var sheetIn = excelIn.Worksheets[0];
var rowIn = 1;
while (sheetIn.Cells[rowIn, 0].Value != null)
{
data.Add(new Item()
{
Id = int.Parse(sheetIn.Cells[rowIn, 0].Text),
Title = sheetIn.Cells[rowIn, 1].Text,
Value = int.Parse(sheetIn.Cells[rowIn, 2].Text)
});
rowIn++;
}
excelIn.Close();
var excelOut = Factory.GetWorkbook();
var sheetOut = excelOut.Worksheets.Add();
sheetOut.Name = "Out";
var rowOut = 0;
sheetOut.Cells[rowOut, 0, rowOut, 2].Font.Bold = true;
sheetOut.Cells[rowOut, 0].Value = "Id";
sheetOut.Cells[rowOut, 1].Value = "Title";
sheetOut.Cells[rowOut++, 2].Value = "Value";
foreach (var item in data)
{
sheetOut.Cells[rowOut, 0].Value = item.Id;
sheetOut.Cells[rowOut, 1].Value = item.Title;
sheetOut.Cells[rowOut++, 2].Value = item.Value;
}
excelOut.SaveAs(folder + "SpreadsheetGear_" + Guid.NewGuid() + ".xlsx", FileFormat.OpenXMLWorkbook);
excelOut.Close();
timer.Stop();
return timer.ElapsedMilliseconds;
主な機能
var runs = 1;
var testerG = new TestSpreadsheetGear();
var testerE = new TestEpPlus();
var msE = 0.0;
var msG = 0.0;
var i = 0;
for (i = 0; i < runs; ++i)
{
msG += new TestSpreadsheetGear().Run(folder, originalFile);
}
for(i = 0; i < runs; ++i)
{
msE += new TestEpPlus().Run(folder, originalFile);
}
Console.WriteLine("Spreadsheet time: " + msG + ". Per file: " + msG / runs);
Console.WriteLine("EP Plus time: " + msE + ". Per file: " + msE / runs);
Console.ReadKey();