2011-04-14 93 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.