WebBrowser (VCL) утечка памяти Windows 2008r2 - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть форма с пропущенной TWebBrowser.Когда открывается форма, происходит следующее:

procedure TRouteMapView.FormShow(Sender: TObject);
begin
  RouteMapView.Caption := 'Transport XLR - ' + Main.GlobalSite;
  WebBrowser1.Navigate('https://****/map_only/' + TID);
end;

Загружает динамическую карту для оптимизированного маршрута.Проблема в том, что если я закрою форму до полной загрузки карты, память не будет освобождена.Даже если я подожду, пока он полностью загрузится, не вся память будет освобождена.

Я безуспешно пытался выполнить следующие действия в Formclose:

WebBrowser1.Stop;
WebBrowser1.Navigate('about::blank');
WebBrowser1.Free;

Странно, но я не могу воспроизвестипроблема в Windows 10, , но Я должен поддерживать Windows 2008r2.

Есть идеи, что мне здесь не хватает?

ОБНОВЛЕНИЕ 1

Я пытался создать форму RouteMapView при запуске приложения, а затем просто показать и скрыть ее при необходимости.К сожалению, «Утечка» все еще там, и это еще хуже.Я также пытался дождаться завершения работы WebBrowser, один раз с ReadyState и один раз с Busy, похоже, что-то делает.Но я полагаю, что этот чертов веб-сайт выполняет много сценариев в фоновом режиме, и хотя он говорит, что сделано, это не сделано.Я также думал о том, что, возможно, сам веб-сайт является виновником.Таким образом, я изменил его на www.microsoft.com (я имею в виду, если это утечка, то это не имеет значения :)), но это действительно утечка.

Так что я начал думать о написании небольшого приложения, которое ничего не делает, кромепоказать карту, а затем просто закрывается.И я вызываю его по мере необходимости и жду его.

А потом я понял, когда я полностью закрываю свое приложение ... Память освобождается, так как, когда я снова запускаю другую Программу, все работает нормально, дажеесли я достиг отметки 1,5 ГБ ранее.

Мои знания здесь ограничены, но возможно ли определить, какие экземпляры Internet Explorer были запущены моей Программой, и просто принудительно завершить их?

1 Ответ

0 голосов
/ 07 февраля 2019

Я создал здесь небольшую программу, которая не выполняет ничего, кроме обработки параметров из моего основного приложения, и отображает результат в веб-браузере.

Насколько я могу судить, утечки памяти больше нет.

Что я заметил во внешней программе, так это то, что иногда, когда я вызывал ее, я получал сообщение об ошибке fwpuclnt.dll и иногда dhcpcsv6.dll.

Я делал навигацию по Form.OnShow, поэтому я переключился на таймер, при запуске программы я жду 2 секунды, затем пытаюсь перейти.Ошибки относительно двух DLL исчезли.Я только иногда получаю сообщение об ошибке от самого Internet Explorer, не могу перейти на страницу, нажимаю обновить.В противном случае все в порядке.

О, и я забыл упомянуть, что это сервер терминалов Windows 2008r2.

С уважением, Роберт

...