4

私のアプリケーションは、Web ページをロードする TWebBrowser を使用しています。問題は、TWebBrowser を含むフォームを閉じた後、使用されたメモリが解放されないことです。フォームを開いて閉じると、メモリが増え続けます。

この問題を解決するために SetProcessWorkingSetSize() または CoFreeUnusedLibrariesEx() を呼び出すことに関する投稿を見ましたが、これらのいずれかが正しい解決策であるかどうかはわかりません。

TWebBrowser が使用するメモリを解放する方法はありますか?

4

6 に答える 6

1

TWebBrowser を使用すると、裏で多くの作業が行われます。これは、Internet Explorer の完全なインスタンスが行う作業とほとんど同じです。それはあなたから隠されていますが、それでもそこにあり、メモリから強制的に削除することはできません。ページのロード前とロード間のメモリ使用量を確認し、 を呼び出したときに何が起こるかをテストしますNavigate('about:blank');。また、デストラクタが適切に呼び出されるかどうかを確認Navigate('about:blank');し、OnClose または OnCloseQuery から呼び出すことを検討してください。私はこれがメモリ状況に少し役立つことを発見しました.

于 2012-04-19T17:04:57.133 に答える
-2
procedure TForm1.FreeMemory;
begin
    if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;

そして時々それを呼び出す

FreeMemory;
于 2013-10-02T21:54:40.110 に答える