Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 27.12.2015
Сообщений: 19

Тормоза при выполнении запросов к БД Firebird

28.03.2016, 12:34. Показов 1814. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу вашего совета:
Есть форма C# на которой есть datagridview. Данные берутся из БД Firebird:
C#
1
2
3
4
5
6
7
8
DataTable dt = new DataTable();
FbDataAdapter da = new FbDataAdapter();
FbCommand fbcmmd = new FbCommand(comm, fbConn);
fbcmmd.CommandType = CommandType.Text;
FbDataReader dr = fbcmmd.ExecuteReader();
dt.Load(dr);
DataGridView_Tasks.DataSource = null;
DataGridView_Tasks.DataSource = dt;
Есть функции добавления строк в БД (элементы формы и FbCommand с командой INSERT), удаления строк (DELETE) и изменения(UPDATE). Есть фильтры, которые срабатывают при нажатии кнопки (отобразить записи где столбец=null и т.д. так же посылает запрос через FBCommand).
Проблема
Поначалу все работало как часы, однако когда БД выросла до ~100 записей - стали заметны тормоза при выполнении этих самых запросов (SELECT, INSERT, UPDATE). Полагаю, что чем дальше БД будет расти - тем более жуткими будут тормоза. Подскажите, можно ли как-нибудь оптимизировать это дело? Может как-то можно выгружать БД в память и работать с БД в памяти, а при закрытии выгружать БД из памяти в файл? Или может просто нет необходимости при любом случае отправлять к БД запросы... В общем, нужны ваши советы.

Спасибо заранее за советы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2016, 12:34
Ответы с готовыми решениями:

Firebird ошибка при выполнении selectSQL
Здравствуйте. При работе с SelectSQL выдает ошибку, что не найдено ключевое поле Field id_enet not found with Form2.IBDataSet3 do ...

Ошибка при выполнении хранимой процедуры - FireBird
Помогите люди добрые. Сия процедура компилируется нормально, но при выполнении возникает ошибка. Не могу понять в чем дело. create or...

Тормозит программа при выполнении запросов
Добрый день. Имеется приложение написанное на foxpro и использованием базы данных на sql server 2008 r2 express. Проблема в следующем....

6
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
28.03.2016, 15:33
demonoffuture, так может ты покажешь как ты выполняешь эти команды?

Добавлено через 3 минуты
Через FbDataReader долго, забирай данные из таблиц через FbDataAdapter, например:
C#
1
2
3
4
5
6
7
if (dbConnect.State != ConnectionState.Open)
     dbConnect.Open();
String getClientsText = "Select * FROM TableName";
FbCommand getClientsCom = new FbCommand(getClientsText, dbConnect);
FbDataAdapter FDA = new FbDataAdapter(getClientsCom);
DataTable t = new DataTable();
FDA.Fill(t);
0
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
28.03.2016, 17:45
demonoffuture, не нужно держать в памяти 100К записей. Забирайте из БД только нужные Вам записи. Сделайте постраничный просмотр.
0
0 / 0 / 0
Регистрация: 27.12.2015
Сообщений: 19
29.03.2016, 07:08  [ТС]
aquaMakc
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
if (TextBox_Search.Text.Length > 1) Button_SearchClick(null, null); //если строка поиска не пуста - имитировать нажатие кнопки поиск
else 
  {
  try
    {
    if (DataGridView_Tasks.Rows.Count > 0) //установка курсора если датагрид не пустой
      {
      curs[0] = DataGridView_Tasks.CurrentCell.RowIndex;
      curs[1] = DataGridView_Tasks.CurrentCell.ColumnIndex;
      }
    }
  catch {}
fbConn.ConnectionString = csb();
if (fbConn.State == ConnectionState.Closed) fbConn.Open(); //открытие соединения если не открыто
if (CheckBox_Active.Checked == false) //выбрать все записи
 
command = "SELECT ID, COURT AS "Объект автоматизации", TASK AS "Задание", DATE_ADD AS "Дата добавления", DATE_WORKED AS "Проводились работы", DATE_CLOSED AS "Дата выполнения" FROM TASKS WHERE DATE_CLOSED > '" + DateTime.Now.AddDays(-1).ToShortDateString() + "' OR DATE_CLOSED IS NULL";
 
else //выбрать записи без даты завершения
 
command = "SELECT ID, COURT AS "Объект автоматизации", TASK AS "Задание", DATE_ADD AS "Дата добавления", DATE_WORKED AS "Проводились работы", DATE_CLOSED AS "Дата выполнения" FROM TASKS WHERE DATE_CLOSED IS NULL";
 
SelectFromTasks(command); 
DataGridView_Tasks.Columns[0].Visible = false; //id, нужен для UPDATE
DataGridView_Tasks.Columns[1].Width = 140; //установка ширины столбцов
DataGridView_Tasks.Columns[3].Width = 100;
DataGridView_Tasks.Columns[4].Width = 100;
DataGridView_Tasks.Columns[5].Width = 100;
DataGridView_Tasks.Columns[3].Width = 100;
DataGridView_Tasks.Columns[4].Width = 100;
DataGridView_Tasks.Columns[5].Width = 100;
if (curs[0] > DataGridView_Tasks.Rows.Count) curs[0] = DataGridView_Tasks.Rows.Count - 1; //установка курсора на последнюю позицию, если текущей позиции не существует
try {DataGridView_Tasks.CurrentCell = DataGridView_Tasks[curs[1], curs[0]];} catch {}
DataGridView_Tasks.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
}
 
void SelectFromTasks(string comm)
{
  DataTable dt = new DataTable();
  FbDataAdapter da = new FbDataAdapter();
  FbCommand fbcmmd = new FbCommand(comm, fbConn);
  fbcmmd.CommandType = CommandType.Text;
  FbDataReader dr = fbcmmd.ExecuteReader();
  dt.Load(dr);
  DataGridView_Tasks.DataSource = null;
  DataGridView_Tasks.DataSource = dt;
}
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
29.03.2016, 09:00
вместо
Цитата Сообщение от demonoffuture Посмотреть сообщение
C#
1
2
FbDataReader dr = fbcmmd.ExecuteReader();
dt.Load(dr);
используй FbDataAdapter как в моём примере
1
0 / 0 / 0
Регистрация: 27.12.2015
Сообщений: 19
29.03.2016, 09:34  [ТС]
Цитата Сообщение от aquaMakc Посмотреть сообщение
вместо
Цитата Сообщение от demonoffuture Посмотреть сообщение
используй FbDataAdapter как в моём примере
Действительно, отрисовка стала заметно быстрее. Спасибо за совет.
Вопрос к Пaтрик -имеет ли смысл использовать постраничный просмотр, если БД не планирует расти до 100к записей?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
29.03.2016, 09:45
Цитата Сообщение от demonoffuture Посмотреть сообщение
имеет ли смысл использовать постраничный просмотр, если БД не планирует расти до 100к записей?
Всё зависит от конкретной ситуации, если у тебя 100к записей по 1 байту (утрирую) - никакого смысла читать постранично нет, если же у тебя каждая запись по десятку мегабайт - есть.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2016, 09:45
Помогаю со студенческими работами здесь

Увеличение размера БД при выполнении запросов?
Раньше как-то не замечал, а тут сделал "сервис", который 2 раза в минуту выполняет набор запросов на удаление и добавление записей. Так вот...

Ошибка(исключение) при выполнении http запросов
При выполнении http запросов выдает ************** Текст исключения ************** System.Net.WebException: Невозможно соединиться с...

Обработать в программе зависание при выполнении SQL запросов
Добрый день! Есть в программе тяжелый SQL запрос, выполняющийся до нескольких десятков минут - в это время программа зависает и ждет...

Стал конкретно тормозить sql server при выполнении запросов
Привет всем. Ситуация следующая: стоит Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (Intel X86) Express Edition with Advanced Services...

Добавить таблицу к столбцу в выборке результатов при выполнении запросов через Ssms
Добрый день. Подскажите может есть настройки чтобы при запросе select * from person left join groups g on g.groupid =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru