2012-04-01 12 views
0

以下のコードで新しいウィンドウを生成し、そこにWebページを表示して閉じます。しかし、しばらくすると、ソフトウェアはメモリの例外を出します。だからメモリリークが起こっている。原因と解決方法は?ありがとうございました。新しいウィンドウを作成して閉じるとメモリリークが発生する

これは新しいウィンドウを開始する方法です。私はループをしているので、何千もの新しいウィンドウが開始されています。あなたが60秒後に見ることができるように、新しいウィンドウはそれ自身の近くになる。

NewWindowThread<TitleWindow, string>(c => new TitleWindow(c), "the url that is going to be displayed at new window"); 

private void NewWindowThread<T, P>(Func<P, T> constructor, P param) where T : Window 
{ 
    Thread thread = new Thread(() => 
    { 
     T w = constructor(param); 
     w.Show(); 
     w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown(); 
     System.Windows.Threading.Dispatcher.Run(); 
    }); 
    thread.SetApartmentState(ApartmentState.STA); 
    thread.Start(); 
} 

public class TitleWindow : Window 
{ 
    WebBrowser webnew = new WebBrowser(); 
    public TitleWindow(string srUrl) 
    {    
     DockPanel dk = new DockPanel(); 
     dk.Width = 900; 
     dk.Height = 600; 
     this.AddChild(dk); 
     webnew.Navigated += new NavigatedEventHandler(wbMain_Navigated); 

     System.Windows.Threading.DispatcherTimer dispatcherTimer3 = new System.Windows.Threading.DispatcherTimer(); 
     dispatcherTimer3.Tick += new EventHandler(dispatcherTimer_Tick3); 
     dispatcherTimer3.Interval = new TimeSpan(0, 0, 0, 60, 0); 
     dispatcherTimer3.Start(); 

     webnew.Height = 600; 
     webnew.Width = 900; 
     dk.Children.Add(webnew); 
     webnew.Navigate(srUrl); 

     this.WindowState = WindowState.Minimized; 
    } 

    void dispatcherTimer_Tick3(object sender, EventArgs e) 
    {    
     this.Close(); 
    } 
} 
+0

「何千もの新しいウィンドウ」がある場合、メモリが不足しています(メモリリークはありません)。 –

+0

何を試しましたか?なぜこれを理解するためにメモリプロファイラを使用しないのですか? –

+0

何千ものウィンドウを開く必要がありますか? – svick

答えて

3

私はすぐにWebBrowser制御があなたはそれがDispose()方法だを呼び出していないとして、ウィンドウが閉じられているそれのリソースを解放していないと思われます。 WebBrowserコントロールは、ActiveX MSHTMLコントロールを囲む薄いラッパーです。

これを行うには、ウィンドウClosingまたはClosedイベントでコールバックを追加します。例えばwebnew.Dispose()

+0

実際、ウィンドウを閉じるだけでは十分ではありません。それはそれから行っていない。 – flq

+0

ありがとうございました。しかし、時間が流れてソフトウェアが動くにつれて、メモリの使用量は増え続けています。(まだ十分ではないと思いますが、それでもメモリを解放していないのですが、残りの部分は非常にシンプルです。 – MonsterMMORPG

+0

どこに?あなたの投稿されたサンプルコードでは、これを試したことが分かりません複数の問題がありますWindowsとInternet Explorerのどのバージョンをインストールしましたか? – Dennis

関連する問題