Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постоянная утечка памяти, TpFIBQuery и TpFIBDataSet 
:(
    Опции темы
Ace Wentura
Дата 26.4.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Происходит буквально следующее. Есть метод. К нему обращаясь передают параметры. Эти параметры забиваются сначала в TpFIBDataSet, его активизирую и получаю результат.
По итогам создаю SQL-запрос и пихаю его в TpFIBQuery. Аналогично активизирую и получаю результат.
Так вот, после выполнения запросов каждый раз сжирается некая память. Всё бы ничего, да она ещё и не очищается. Но это тоже не проблема. Проблема в том, что после 20000 раз (а это ещё не предел) системе перестаёт хватать памяти даже виртуальной.
Как с этим бороться?
PM MAIL   Вверх
Петрович
Дата 26.4.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Ошибка в 17-й строке.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Ace Wentura
Дата 26.4.2005, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



А что это означает?
PM MAIL   Вверх
fess
Дата 26.4.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: нет
Всего: 3



Это означает, что неплохо бы выложить код для просмотра, а то телепатических способностей не хватает для диагностики ошибки smile
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Ace Wentura
Дата 26.4.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Извиняюсь. Я просто подумал, что это какая-то стандартная ошибка типа: забыл сделать free. Или ещё что в этом роде.

Вот код.
Код

function TDM.GetValue(Key: String; ID: Integer): String;
var
  sql: string;
begin

  if (Key<>'5')then
  begin
    pFIBDSFields.Active := False;
    pFIBDSFields.ParamByName('Param_Rus').AsString := Key;
    pFIBDSFields.Active := True;

    if (not pFIBDSFields.Eof) then
    begin
      if Key='4' then
        sql := 'SELECT ... ;'
      else
        if ((Key='1') or (Key='2') or (Key='3')) then
          sql := 'SELECT ...;'
        else
          sql := 'SELECT ...;';
      pFIBQuery.Close;
      pFIBQuery.SQL.Clear;
      pFIBQuery.SQL.Add(sql);
      pFIBQuery.ExecQuery;

      if (not pFIBQuery.Eof) then
      begin
        if (pFIBQuery.Fields[0].AsString='') then
          Result := '-'
        else
          Result := trim(pFIBQuery.Fields[0].AsString);
      end
      else
        Result := '-';
    end
    else
      Result := '-';
  end
  else
  begin
    Result := GetIO(ID);
  end;
end;


Запросы SQL сократил, но они работают точно.
PM MAIL   Вверх
Ace Wentura
Дата 27.4.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всё, багу поправил.
Дело было не в запросах и не в компонентах работы с БД, а в том, что не чистиллись корректно списки.

Но всё-таки интересно, сказывается ли как-нибудь на объёме используемой оперативки то, вызываю ли я принудительно Transaction.commit(rollback) или не вызываю (как у меня)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.