2011-11-11 8 views
-2

私はVisual Studio .NETを使用してアプリケーションを構築しており、正常に動作します。アプリケーションが2〜3時間以上使用されると、アプリケーションは遅くなり始め、理由はわかりません。私はGC.Collect();を使用してメモリリークの問題を解決しましたが、今は新しいものがあります。 解決策を知っている人はいますか?アプリケーションからの勝利が遅くなります

+0

詳細やコードがなくても、あなたの質問はおそらくは答えが広すぎるでしょう。あまりにも多くの未知の要素があります。おそらくシンプルで汎用的な解決策はありません。 –

答えて

1

あなたが本当にメモリリークを持っている場合は、単にGC.Collect()を呼び出すと、どこにもあなたを取得しません。 GarbageCollectorは他のオブジェクトから参照されていないオブジェクトだけを収集することができます。

オブジェクトを正しくクリーンアップしないと、GCは何も収集しません。

メモリ消費量を取り扱う際に、あなたが強く、次のパターンを検討してください:

  1. 弱いイベント(MSDN Documentation here) あなたがイベントからではない退会を行う場合は、サブスクライブオブジェクトが中に放出されることはありませんがガベージコレクション。 GC.Collect()これらのオブジェクトを削除すると、それらはあなたの記憶を乱雑にします。

  2. はあなたが常に無料のリソースを使用すべきである(MSDN documentation here) は(私が間違っているの実装をたくさん見てきたように、私は強く、このducumentationを読むことをお勧めします。) IDisposableインターフェイスを実装します。電話番号Dispose()それを提供するすべてのオブジェクト!

  3. 同じことがストリームに適用されます。には、常にClose()と連絡してください。

  4. ポイント2と3を簡単にするには、usingブロックを使用できます。 (MSDN documentation here) とすぐにこれらのコードブロックがスコープの外に行くように、彼らは自動的に指定されたオブジェクト上の適切なDispose()またはClose()メソッドを呼び出し。これは、try... finallyの組み合わせを使用する場合と同じですが、より便利です。

+0

私はデバッグでデプロイしたので、DebugとReleaseとの大きな違いはありますか?私はリリースモードで私のセットアップを構築すると速いですか? –

+0

一般に、RELEASEモードのアプリケーションはDEBUGモードよりも若干速くなります。なぜなら、DEBUGモードでは、RELEASEとしてデプロイされたときには実行されない「舞台裏」で多くの面白いものがあるからです。しかしGarbageCollectorに関してはこれはあまり効果がありません。私はこれが間違った方向に進むと思う。 –

関連する問題