我有几千行的表,但即使我尝试读取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函数需要很长时间。
您有什么想法,如何加快代码速度?
答案 0 :(得分:1)
试试这个OleDBAdapter Excel QA我通过堆栈溢出发布了。
我从上一篇文章中获取了我的工作表,并添加了列(总共10个)和行(总共10,000个)并将其打包为数据(excel文件为1,770 KB)。使用XP w / 4 cpus,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.