![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Утечка памяти DataSet
Вова © (2012-10-13 03:42:00)
BaseAlphabet.ClientDataSet1.first;
While Not BaseAlphabet.ClientDataSet1.Eof Do
begin
BaseAlphabet.CharacterProperties.first;
While Not BaseAlphabet.CharacterProperties.Eof Do
begin
BaseAlphabet.CharacterProperties.Next;
end;
BaseAlphabet.ClientDataSet1.Next;
end;
Вообщем в результате продолжительных изысканий, связанных с невероятно бурным ростом программы в памяти, все что у меня осталось от программы это вот эти 2 цикла. И я повесил их запуск на кнопку. И каждый раз нажимая кнопку я обнаруживаю, что программа стала занимать больше места. И так до бесконечности. У меня 2 вопроса - че за фигня? и что делать?
Inovet (2012-10-13 07:03:00) [1]Деактивировать перед, активировать после.
Вова (2012-10-13 03:58:00) [2]вопрос снимается, чуть чуть недотерпел ) оказалось что эту программу можно еще упростить
BaseAlphabet.ClientDataSet1.first;
While Not BaseAlphabet.ClientDataSet1.Eof Do
BaseAlphabet.ClientDataSet1.Next;
До такой, и результат будет тот же. Также выяснилось что в данном цикле вызывается событие ClientDataSet1AfterScroll, в котором и обнаружилась протечка. Правда вот дело в том, что нафиг мне не нужно чтобы оно вызывалось при программном проходе по таблице, притом что форма даже не открыта, хоть и создана.
В отчаянии, я попробовал сделать так:
BaseAlphabet.ClientDataSet1.DisableControls;
BaseAlphabet.ClientDataSet1.first;
While Not BaseAlphabet.ClientDataSet1.Eof Do
BaseAlphabet.ClientDataSet1.Next;
BaseAlphabet.ClientDataSet1.EnableControls;
Но это совсем мне не помогло. Итого утечка памяти устранилась, но выяснилось, что программа тратит время на вещи, на которые абсолютно в данной ситуации не нужно тратить время. При этом в интерактивном режиме через DBGrid когда по таблице лазишь, это собитие делает полезную работу.
Откуда возник новый вопрос, можно ли сделать так чтобы при программном прохождении цикла это событие не активировалось?