如何释放Webbrowser所占用的内存资源(200分)

  • 主题发起人 主题发起人 枝上柳绵
  • 开始时间 开始时间

枝上柳绵

Unregistered / Unconfirmed
GUEST, unregistred user!
我用一个循环生成一个窗体,在这个窗体里有一个webbrowser,在显示这个窗体时webbrowser访问一个给定的网址,访问完毕后自动关闭该窗体,再重新循环生成新的窗体
结果发现一会儿机器内存就不够了,原来是webbrowser所占用的内存没有被自动释放
请教高手高手高高手们,我应当如何做呢
procedure TForm2.tmr2Timer(Sender: TObject);
var f1:TForm1;
begin
if qry1.Eof =False then
begin
currentIndex:=currentIndex+1;
try
f1:= TForm1.Create(nil) ;
With f1 do
begin
clientid:=qry1.Fields[0].AsString ;
kd:=qry1.Fields[4].AsString ;
ddh := qry1.Fields[5].AsString ;
dhinfo:=qry1.Fields[9].AsString ;
end;
self.Caption :='当前订单:'+inttostr(currentIndex);
qry1.next;
self.tmr2.Enabled :=False;
f1.ShowModal ;
finally
f1.free;
Application.ProcessMessages;
self.tmr2.Enabled :=true;
end;
end;


还有一个疑问,有没有办法清除网页的缓存和cookie
例如我现在要访问
http://www.zjs.com.cn/WS_Internal/WS_Internal_index.aspx
我输入订单号之后,查找后,
我再一次访问http://www.zjs.com.cn/WS_Internal/WS_Internal_index.aspx
它的页面没有变化,不能回到原来的页面
 
关闭窗体,但是没有释放
用With TForm1.Create(nil) do
try

finally
free;
end;
格式创建
 
var f1:TForm1;
begin
f1:=TForm1.Create(nil);
f1.ShowModal ;

f1.Free;
end
可是窗体我已经释放了啊
谢谢您的关注
 
我觉得你可以用一个内存泄漏的工具查查..现在看来不是这里的内存泄漏
 
谢谢madic关注

还有一个疑问,有没有办法清除网页的缓存和cookie
例如我现在要访问
http://www.zjs.com.cn/WS_Internal/WS_Internal_index.aspx
我输入订单号之后,查找后,
我再一次访问http://www.zjs.com.cn/WS_Internal/WS_Internal_index.aspx
它的页面没有变化,不能回到原来的页面
 
有...不过要找找,我有这方面的代码
 
function GetCookiesFolder: string; //取Cookies目录
procedure DelCookie; //删除cookies(ie缓冲文件夹下面cookies文件)
procedure DelHistory; //删除历史记录(ie缓冲文件夹下所有文件)


function GetCookiesFolder: string;
var
pidl: pItemIDList;
buffer: array[0..255] of char;
begin
SHGetSpecialFolderLocation(
0, CSIDL_COOKIES, pidl);
SHGetPathFromIDList(pidl, buffer);
Result := StrPas(buffer);
end;
//删除cookies

procedure DelCookie;
var
dir: string;
begin
try
InternetSetOption(nil, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0);
dir := GetCookiesFolder;
RemoveTree(dir, '.txt'); //网上很多代码这里没有加最后的#0,在xp下经测试会报错
except
abort;
end;
end;

//删除历史记录

procedure DelHistory;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir: LongWord;
dwEntrySize, dwLastError: LongWord;
begin
try
dwEntrySize := 0;
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
if hCacheDir <> 0 then
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo);
repeat
dwEntrySize := 0;
FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^),
dwEntrySize);
dwLastError := GetLastError();
if dwLastError = ERROR_INSUFFICIENT_BUFFER then //如果成功
begin
GetMem(lpEntryInfo, dwEntrySize); {分配dwEntrySize字节的内存}
if FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize) then
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo);
end;
until (dwLastError = ERROR_NO_MORE_ITEMS);
except
abort;
end;
end;
 
接受答案了.谢谢各位的关注
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部