问题描述
|
我的表有几千行,但是即使我尝试读取1000行(和10列),也要花费大约10秒钟才能得到结果。我认为它太慢了,但是我找不到任何问题。
读取数据的代码:
string connectionString = string.Format(\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;\"\",_excelFilename);
using (OleDbConnection c = new OleDbConnection(connectionString)) {
c.Open();
OleDbCommand cmd = new OleDbCommand(\"SELECT * FROM [Trend_Data$A1:J1000]\",c);
OleDbDataReader dbReader = dbCommand.ExecuteReader();
while (dbReader.Read()) {
object[] values = new object[10];
dbReader.GetValues(values);
//save values into internal structure - fast
...
}
单步执行代码后,我发现调用ExecuteReader函数花费了很长时间。
您有什么想法,如何加速代码?
解决方法
试试我通过堆栈溢出发布的OleDBAdapter Excel QA。
我从上一篇文章中提取了工作表,并添加了列(共10个)和行(共10,000个),并打包了数据(excel文件为1,770 KB)。使用带有4 cpus的XP,Visual Studio 2010,该过程不到1秒。
在顶部添加:
Stopwatch queryWatch = new Stopwatch();
queryWatch.Start();
并在底部:
Console.WriteLine(\"Elapsed Query time: {0}.{1} seconds.\",queryWatch.ElapsedMilliseconds / 1000,queryWatch.ElapsedMilliseconds % 1000);
Console.ReadLine();
输出:
Elapsed Query time: 0.623 seconds.