Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# FbDataReader и FbDataAdapter, что быстрее / 13 сообщений из 13, страница 1 из 1
15.08.2019, 11:19
    #39849649
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
Всем доброго времени суток!
Может веткой ошибся, если что - модераторы, перенесите, пожалуйста, в Firebird.
Изучаю ADO.NET по книге Д. Сеппа, но только пользуюсь БД Firebird, соответственно и немного другими компонентами доступа.
Так вот, в книге написано, что DataReader исаользуется только для чтения и он быстрее, чем DataAdapter, который и читает и пишет данные в базу. Имею такой код:
Запрос в БД
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
var sw = new Stopwatch(); // инициализируем таймер
sw.Start(); // запускаем
if (rbAdapter.Checked == true)
{  // используем адаптер
    da = new FbDataAdapter("select * from " + tbTableName.Text, db);
    var cb = new FbCommandBuilder(da); // генерируем update, insert и delete-запросы для DataAdapter-а
    da.Fill(dt);
}
else
{  // используем ридер
    FbCommand cmd = db.CreateCommand();
    cmd.CommandText = "select * from " + tbTableName.Text;
    cmd.CommandType = CommandType.Text;
    FbDataReader dr = cmd.ExecuteReader(); // создаем DataReader и открываем запрос вызовом метода ExecuteReader у FBCommand
    dt.Load(dr); // Прогружаем таблицу в памяти DataTable
}
dataGridView1.DataSource = dt; // Присваиваем сетке на форме DataSource
sw.Stop(); // останавливаем таймер
MessageBox.Show(sw.ElapsedMilliseconds.ToString());


У меня DataAdapter загружает таблицу за ~2564 мс, а DataReader за ~4599.
Почему так? Так же не должно быть, или я неправильно все понял?
...
Рейтинг: 0 / 0
15.08.2019, 11:32
    #39849664
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
Сколько записей в талице, которые грузятся за такое время?
...
Рейтинг: 0 / 0
15.08.2019, 11:43
    #39849673
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
Ролг Хупин, 19 строк и 15 полей, включая блоб(фото), база удаленная, через впн.
...
Рейтинг: 0 / 0
15.08.2019, 12:12
    #39849699
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
afordУ меня DataAdapter загружает таблицу за ~2564 мс, а DataReader за ~4599.
Почему так? Так же не должно быть, или я неправильно все понял?Исключите для начала BLOB-поля из select-запроса. Тогда скорее всего между DataAdapter и DataReader на 19-ти записях вообще не будет разницы
...
Рейтинг: 0 / 0
15.08.2019, 12:16
    #39849703
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
afordРолг Хупин, 19 строк и 15 полей, включая блоб(фото), база удаленная, через впн.

1.как было рекомендовано выше - уберите блобы для замеров.
2. Чего вы хотите добиться на 19 записях?
3. Вы пробовали сделать замеры подряд раз 10?
4. Почему вы исключаете на 19 записях и 2-4 секундах фактор впн, сети?
...
Рейтинг: 0 / 0
15.08.2019, 12:21
    #39849708
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
Shocker.Pro, запрос "select user_id from table":
adapter: 168 мсек
reader: 281 мсек

Может я неправильно понимаю разницу между объектами?
Почему DataReader зачастую сравнивается с DataTable в той же книге, а не с DataAdapter? Чем больше вникаю - тем больше путанницы.
А может дело в том, как эти объекты реализованы в FirebirdSql.Data.FirebirdClient, я ж не замерял скорость у стандартных...
...
Рейтинг: 0 / 0
15.08.2019, 12:42
    #39849718
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
Ролг Хупин,
1) Убрал - адаптер все равно быстрее.
2) 19 записей для теста, полная таблица, где записей всего то около 3500 тыс грузится очень долго (блоб поля)
3)
Adapter
224
178
161
163
176
330
173
280
170
164
300
235
168
167
166
208
169
152
167
Reader391
313
369
389
393
384
1354
891
813
415
311
299
323
303
303
288
390
328
295

4) Datareader и Adapter по-разному взаимодействуют с впн?

Я как-то в ступоре уже))
...
Рейтинг: 0 / 0
15.08.2019, 13:47
    #39849762
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
aford, да написано... но про другое... Если вам интересно - смотрите реализацию Fill адаптера и Load дататабла. Может там и перегрузки есть... смотрите параметры... и тест у вас - грязноват
...
Рейтинг: 0 / 0
15.08.2019, 13:56
    #39849774
SirYouGin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
aford, попробуйте для начала заменить
Код: c#
1.
"select * from " + tbTableName.Text


на
Код: c#
1.
"select limit 5000 id from " + tbTableName.Text



Т.е. выбрать первые 5000 строк из таблицы. Id - в данном примере название колонки. Замените его на актуальное значение.

Вроде такой синтаксис поддерживает Firebird.
https://scott.yang.id.au/2004/01/limit-in-select-statements-in-firebird.html

Увеличивайте количество строк пока время выполнения не превысит хотя бы 1 минуту.
Тогда уже можно будет сравнивать.
...
Рейтинг: 0 / 0
15.08.2019, 14:08
    #39849785
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
SirYouGin, да тут еще вопрос в методике проверки и где объявлен dt... не удивлюсь, что сперва его филят, а потом в него же лоадят...
И вот она веселуха
Код: c#
1.
2.
3.
    public void Load (IDataReader reader){
            Load(reader, LoadOption.PreserveChanges, null);
        }
...
Рейтинг: 0 / 0
15.08.2019, 14:13
    #39849786
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
А вот филл работает несколько иначе... В такого рода тесте вообще нет выгоды в использовании реадера
...
Рейтинг: 0 / 0
15.08.2019, 14:43
    #39849801
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
afordв книге написано, что DataReader ... быстрее, чем DataAdapter
Имеется в виду, что ридер будет использовать следующим образом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // тут вручную читаем значения
    }
}



А dt.Load(dr) - это использование DataTable, который известный тормозилка.
...
Рейтинг: 0 / 0
15.08.2019, 16:20
    #39849890
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# FbDataReader и FbDataAdapter, что быстрее
petalvik, спасибо тебе, и всем, кто участвовал в теме, теперь все прояснилось!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# FbDataReader и FbDataAdapter, что быстрее / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]