Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
ВнизTWebBrowser, IHTMLDocument и утечка памяти Найти похожие ветки
← →
Percent (2006-07-29 14:25) [0]
var
Txt: string;
Document: IHTMLDocument;
V: OLEVariant;
Browser: TWebBrowser;
begin
// 1
WebBrowser.Navigate("about:blank");
while (WebBrowser.Document = nil) do
Application.ProcessMessages;
//2
Txt := "Hallo, world!";
Document := Browser.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := Txt;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
end;
Код (2) вызывает утечку памяти, около нескольких десятков килобайт на одну загрузку. То есть, если динамически создавать WebBrowser, а потом загружать таким образом в него содержимое, то в диспетчере задач наблюдается прогрессирующее увеличение памяти, занимаемой программой. То есть, не "плавание" около какого-то значения, а именно увеличение. Догнал до 50 МБайт, после чего решил остановиться - и так все понятно.
Вот, потому и вопрос: Что сделать, чтобы утечки не было?
← →
Percent (2006-07-29 23:03) [1]То есть, ни у кого никаких соображений?
← →
Percent (2006-07-30 02:45) [2]М-да... нашел решение. Странное такое решение.
...
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
Document._Release;
То есть, вот такое "принудительное" декрементирование.
Почему - не понимаю. Ведь Document - локальная переменная. Уменьшение счетчика ссылок должно произойти автоматически, при выходе за пределы видимости переменной, т.е., при выходе из метода. Но... дудки! Даже принудительное Document := nil не помогало (что, впрочем, имеет естественное объяснение). Интересно, "кто" "застолбил" интерфейсную ссылку?
← →
Плохиш © (2006-07-31 11:28) [3]
> Percent (29.07.06 14:25)
Не ври нам, на строке
> Document := Browser.Document as IHtmlDocument2;
происходит ошибка доступа к памяти, т.к. переменная Browser не инициализирована.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.052 c