OleDb - 从Excel缓慢读取

时间:2011-04-14 12:55:45

标签: excel oledb

我有几千行的表,但即使我尝试读取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函数需要很长时间。

您有什么想法,如何加快代码速度?

1 个答案:

答案 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.