Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти - 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.014 c
2-1143205376
san_pancho
2006-03-24 16:02
2006.04.09
Кодировка


9-1127371740
Dark Lord
2005-09-22 10:49
2006.04.09
Вопрос по статье "Использование библиотеки OpenGL"


2-1143107174
Sw
2006-03-23 12:46
2006.04.09
Message


2-1142956108
Progger
2006-03-21 18:48
2006.04.09
localhost = 127.0.0.1 ?


2-1143172232
PIA
2006-03-24 06:50
2006.04.09
Обработка визуальных компонентов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский