1

2つのWebBrowserコンポーネントで構成されるカスタムテキストボックス(読み取り専用)を使用しています。複雑なレイアウトでテキストを表示しています(HTMLコードの生成は、このようなテキストビューアを作成するための最も簡単なオプションでした)。

また、すべてのコンポーネントでmousedownイベントをバインドしています。

foreach (HtmlElement html in webBrowser1.Document.All)
{
     html.MouseDown += new HtmlElementEventHandler(Scrollback_Clicked);
}

これは、htmlソースのロードを終了するたびに発生します。(これは関係ありませんが、それが機能しない理由である場合に備えて、私が行ったWebBrowserコントロールの唯一のカスタマイズです)

ただし、数百回のリロード後、テキストボックスは約2GBのRAMを消費します。これは、これまでに生成されたすべてのHtmlDocumentsを格納するbrowsercontrolが実装したキャッシュであると思われます。

WebBrowserコントロールのキャッシュを無効化またはフラッシュする方法はありますか?

4

1 に答える 1

2

まず、イベントハンドラーを登録する方法を考慮して、イベントハンドラーをリークしている可能性がありますが、それらを破棄できません。これにより、わずかなパフォーマンスの問題が発生する可能性がありますが、2GBのRAMが過剰に消費されることを説明するものではありません。

とにかく、WebBrowserコントロールはInternet Explorerに基づいているため、そこからメモリリークを継承する可能性があります。また、キャッシング理論で何かに興味があるかもしれません。この問題とその解決方法について正確に説明しているナレッジベースの記事があります。アプリケーションがVisualC#.NETでWebBrowserコントロールをホストしているときにキャッシュをクリアする方法

基本的には、 WinInetAPIを使用してブラウザのキャッシュを手動でフラッシュすることをお勧めします。しかし、それは私にはちょっとした解決策のように思えます。これは、グローバルソリューションを使用してローカルの問題を解決しているため、いくつかの危険信号が発生するはずです。

もし私があなたなら、この問題を完全に回避するために、アプリケーションの設計を再考するでしょう。RichTextBoxコントロールには、ショーストッパーのメモリリークはありません。:-)

于 2012-07-26T15:02:22.700 に答える