OleDb - медленное чтение из Excel - PullRequest
1 голос
/ 14 апреля 2011

У меня есть таблица с несколькими тысячами строк, но даже если я пытаюсь прочитать 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 Ответ

1 голос
/ 04 мая 2011

Попробуйте это OleDBAdapter Excel QA Я отправил через переполнение стека.

Я взял свой лист из предыдущего поста и добавил столбцы (всего 10) и строки (всего 10 000) и упаковал их с данными (файл excel имеет размер 1770 КБ). Использование XP с 4 процессорами 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.
...