【发布时间】:2012-07-03 23:42:59
【问题描述】:
在 i7-*3.4 GHz windows-7 64 位计算机上,以下代码需要大约 2500 毫秒才能读取 25000 行和 5 列的 Excel 工作表。每个单元格大约包含一个 10 个字符的字符串。正常吗?我怎样才能更快地阅读它?
Stopwatch sw1 = Stopwatch.StartNew();
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; " +
"Extended Properties=Excel 12.0;", filename);
var adapter = new OleDbDataAdapter("SELECT * FROM [roots$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "roots");
sw1.Stop(); Console.WriteLine("Time taken for excel roots: {0} ms", sw1.Elapsed.TotalMilliseconds);
【问题讨论】:
-
数据集是“重”对象,最好创建自己的类并使用 datareader 填充它的列表
-
我认为大部分性能成本是连接时间(尝试修改记录集大小以查看经过的时间是否急剧增加)
-
尝试将秒表的起点移到建立连接后,看看该部分需要多少时间。但正如 Boomer 已经指出的那样,尝试使用 OleDbCommand 和 OleDbDataReader 而不是 OleDbDataAdapter 和 DataSet,您可能还会获得相当快的速度。
标签: c# performance excel oledb