Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

Утечка памяти - OLE SysString (MemProof)   Найти похожие ветки 

 
АРІ   (2006-03-04 13:54) [0]

Отлаживаю приложение, и тестирую его в MemProof (версия 0.9.5.0).
Обнаруживается некоторая утечка памяти.

Окно "Resource Counters",  строка "OLE" "SysString".

При работе программы наблюдается прогрессивный рост количества этих "системных строк" ("Resource Count" - "Current#"). По немногу, по полусотне байт за операцию, и вроде бы не заметно, но факт.
Подозрение падает на (наследников) TClientDataSet, временные экземпляры которого создаются при каждой операции, а затем освобождаются. За одну операцию может быть создано и разрушено несколько экземпляров (наследников) TClentDataSet. Все места, где создается/уничтожается TClientDataSet, оформлены в try...finally...end.
Утечек других видов памяти (live pointers и пр.) - не наблюдается.

Дополнительная информация: между несколькими экземплярами (наследников) TClientDataSet передаются указатели на DSBase: IDSBase, интерфейс внутреннего хранилища данных (инкапсулированного в TClientDataSet). В принципе, и они могут где-то оставаться в памяти (но интерфейсные ссылки везде "заниляются").

Что это за "системные строки OLE"? В какую сторону "копать"?
Как можно программно (в своей программе) узнать количество этих строк, чтобы поставить контрольные точки и отыскать место утечки? Возможно, у кого-то есть какие-то другие мысли по этому поводу?

P.S. Исходный код пока не привожу, ибо не знаю, где локализована утечка.


 
АРІ   (2006-03-04 15:14) [1]

Набросал тест.
На форму кинул ADOQuery, ClientDataSet, 2 DataSources, 2 Grids, 2 Buttons.
Прописал следующее:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQuery1.Active := not ADOQuery1.Active;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if ADOQuery1.Active then
 begin
   ClientDataSet1.Close;
   ClientDataSet1.SetProvider(ADOQuery1);
   ClientDataSet1.Open;
 end;
end;


И в результате каждого нажатия на Button2, этот самый счетчик OLE SysString в MemProof увеличивается на 9.

Что зарактерно, при каждом открытии ADOQuery1, счетчик OLE SysString тоже прогрессивно увеличивается, но на разные (?) значания, от 10 до 12.

Дополнительная информация: открываемая в ADOQuery1 таблица имеет 22 поля, 4 записи.

Уменьшения значения счетчика OLE SysString я не наблюдал.

То есть, такое поведение является нормальным?
Если количество этих строк неконтролируемо (то есть, они не удаляются), то о чем говорит этот счетчик в MemProof?
Что такое OLE SysString?
В какой области памяти они хранятся, и кто отвечает за их удаление?
Где можно прочитать об этих строках и их поведении?


 
АРІ   (2006-03-04 17:09) [2]

Начинаю чувствовать себя водяным.
"Я водяной, никто не водится со мной" (С)
Или ни у кого никаких соображений на этот счет не имеется?


 
pasha_golub ©   (2006-03-05 17:25) [3]

Имеются. MemProof не всегда корректно обнаруживает МемЛики, вернее иногда видит их там где их нету. Может быть тот случай?



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.013 c
15-1142790487
Суслик
2006-03-19 20:48
2006.04.09
Прокси


6-1135649722
vista
2005-12-27 05:15
2006.04.09
Аналог компонента TWebBrowse для Delphi?


3-1139929240
Ольга
2006-02-14 18:00
2006.04.09
Построение иерархии зависимостей объектов БД


4-1137403828
Senator1979
2006-01-16 12:30
2006.04.09
очередь принтера


1-1141564987
Jiurafsdfsdf
2006-03-05 16:23
2006.04.09
Как запустить из delphi приложение Excel?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский