2011-04-14 94 views
0

我有几千行的表,但即使我试图读取1000行(和10列)大约需要10秒才能得到结果。我认为这太慢了,但我找不到任何问题。OleDb - 从Excel缓慢读取

代码读取数据:

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功能需要这么长时间。

你有什么想法,如何加快代码?

+1

是您的文件存储在本地?如果在共享驱动器上执行将需要一段时间。 – Juliusz 2011-05-17 08:31:35

回答

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.