【问题标题】:OleDb - slow reading from ExcelOleDb - 从 Excel 读取缓慢
【发布时间】:2011-05-04 06:45:05
【问题描述】:

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

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

【问题讨论】:

  • 您的文件是否存储在本地?如果在共享驱动器上执行将需要一段时间。

标签: excel oledb


【解决方案1】:

试试这个OleDBAdapter Excel QA 我通过堆栈溢出发布的。

我从上一篇文章中取出我的工作表,添加了列(总共 10 个)和行(总共 10,000 个),并用数据打包了它(excel 文件为 1,770 KB)。使用 XP w/ 4 cpu、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.

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多