You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lazarus中TWebBrowser组件内存泄漏问题求助

循环打开网页导致的WebBrowser内存泄漏问题

环境信息

  • 操作系统:Windows 7
  • 开发工具:Lazarus V2.2.6(Pascal)

问题详情

在循环中重复打开网页时,每次迭代内存占用都会持续增加,已通过任务管理器定位到核心问题代码(注释中标注了各阶段内存状态):

BusyPanel.visible := True; // 当前内存占用7016 Kb
lpBuffer := 0;
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, @lpBuffer, SizeOf(lpBuffer));
InternetSetOption(nil,INTERNET_OPTION_REFRESH, @lpBuffer, SizeOf(lpBuffer)); // 当前内存占用7652 Kb
InternetSetOption(nil, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0); // 结束前会话,内存增加600+ Kb
ActiveXContainer1.Active:=true;

WebBrowser1.ComServer.Navigate(PathToWebPage, onull,onull,onull,onull); // 当前内存占用8476 Kb
While WebBrowser1.comserver.ReadyState <> ReadyState_Complete Do
Begin
  Sleep(100);
  Application.ProcessMessages; // 必须保留此代码
End;

// 打开网页后内存占用为145,888 Kb
// 此代码处于循环内,内存泄漏随迭代次数增加而加剧
BusyPanel.visible := False; // 打开网页后内存占用仍为145,888 Kb

// 2023年5月10日内存释放实验
// 此前内存占用为134000K

// 释放文档接口
Doc := nil; // 内存占用变为133,900 Kb
// 获取网页浏览器控件接口
Doc := WebBrowser1.ComServer.Document as IHTMLDocument2;

已尝试解决泄漏问题约两个月,以下是试过但无效的操作(已注释):

//WebBrowser1.comserver.Stop;
//WebBrowser1.ComServer.Document._Release; // 内存占用133,000 Kb,无变化
//WebBrowser1.ComServer._Release;// 内存占用133,916 Kb,反而增加
//WebBrowser1.ComServer.free;
//ActiveXContainer1.ComServer := nil;

// 释放ActiveX组件
//ActiveXContainer1.Active := False;  // 当前内存占用95,820 Kb
//ActiveXContainer1.ComServer._Release;

// 当前内存占用95,820 Kb
//WebBrowser1.DestroyComponents;
//WebBrowser1.free;

//WebBrowser1.ComServer.Document := nil;

即使机器配有32GB内存,经过约50次循环后仍会提示“Out Of Memory, Line 1”,此前的相关回答均未针对已定位的代码部分解决问题,恳请帮助!

内容的提问来源于stack exchange,提问作者LaurenceLockwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:08