WebBrowser(VCL)内存泄漏Windows 2008r2

时间:2019-02-05 11:24:55

标签: delphi memory-leaks windows-server-2008-r2 twebbrowser

我有一个放在其上的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

我尝试在Application Startup上创建RouteMapView表单,然后根据需要显示和隐藏它。不幸的是,“泄漏”仍然存在,甚至更糟。 我还尝试等待WebBrowser完成,一次使用ReadyState,一次使用Busy,它似乎可以做些什么。但是我想该死的网站正在后台执行许多脚本,即使它说完成也没有完成。 我还考虑过,也许网站本身就是罪魁祸首。因此,我将其更改为www.microsoft.com(我的意思是如果泄漏了就没关系了:)),但确实泄漏了。

因此,我开始考虑编写一个小型应用程序,该应用程序只显示地图,然后关闭。然后根据需要调用它,然后等待它。

然后我意识到,当我完全关闭我的应用程序时...内存确实被释放了,因为当我再次启动另一个程序时,即使我之前达到了1.5GB的标记,一切也都可以正常工作。

我的知识仅限于此,但是是否可以检测到我的程序启动了哪些Internet Explorer实例并只是强行终止了它们?

1 个答案:

答案 0 :(得分:0)

我在这里创建了一个小程序,除了处理我的主应用程序中的参数外,什么也不做,并在Web浏览器中显示结果。

据我所知,我不再有内存泄漏。

我在外部程序中注意到的是,有时当我调用它时,我收到了有关fwpuclnt.dll有时是dhcpcsv6.dll的错误消息。

我在Form.OnShow上进行导航,所以我改用Timer, 当程序启动时,我等待2秒钟,然后尝试导航。有关这两个dll的错误现已消失。有时,我仅收到来自Internet Explorer本身的错误,无法导航至页面,单击刷新。否则就可以了。

哦,我忘了提到这是Windows 2008r2终端服务器。

问候 罗伯特