powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# FbDataReader и FbDataAdapter, что быстрее
13 сообщений из 13, страница 1 из 1
C# FbDataReader и FbDataAdapter, что быстрее
    #39849649
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Может веткой ошибся, если что - модераторы, перенесите, пожалуйста, в 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
C# FbDataReader и FbDataAdapter, что быстрее
    #39849664
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько записей в талице, которые грузятся за такое время?
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849673
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин, 19 строк и 15 полей, включая блоб(фото), база удаленная, через впн.
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849699
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordУ меня DataAdapter загружает таблицу за ~2564 мс, а DataReader за ~4599.
Почему так? Так же не должно быть, или я неправильно все понял?Исключите для начала BLOB-поля из select-запроса. Тогда скорее всего между DataAdapter и DataReader на 19-ти записях вообще не будет разницы
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849703
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordРолг Хупин, 19 строк и 15 полей, включая блоб(фото), база удаленная, через впн.

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

Может я неправильно понимаю разницу между объектами?
Почему DataReader зачастую сравнивается с DataTable в той же книге, а не с DataAdapter? Чем больше вникаю - тем больше путанницы.
А может дело в том, как эти объекты реализованы в FirebirdSql.Data.FirebirdClient, я ж не замерял скорость у стандартных...
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849718
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,
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
C# FbDataReader и FbDataAdapter, что быстрее
    #39849762
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aford, да написано... но про другое... Если вам интересно - смотрите реализацию Fill адаптера и Load дататабла. Может там и перегрузки есть... смотрите параметры... и тест у вас - грязноват
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849774
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
C# FbDataReader и FbDataAdapter, что быстрее
    #39849785
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirYouGin, да тут еще вопрос в методике проверки и где объявлен dt... не удивлюсь, что сперва его филят, а потом в него же лоадят...
И вот она веселуха
Код: c#
1.
2.
3.
    public void Load (IDataReader reader){
            Load(reader, LoadOption.PreserveChanges, null);
        }
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849786
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот филл работает несколько иначе... В такого рода тесте вообще нет выгоды в использовании реадера
...
Рейтинг: 0 / 0
C# FbDataReader и FbDataAdapter, что быстрее
    #39849801
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
C# FbDataReader и FbDataAdapter, что быстрее
    #39849890
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvik, спасибо тебе, и всем, кто участвовал в теме, теперь все прояснилось!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# FbDataReader и FbDataAdapter, что быстрее
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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