2009-09-02 17 views
0

c#winformアプリケーションで未使用リソースを廃棄する方法GLOBALLY ??c#winformアプリケーションで未使用のリソースを廃棄するGLOBALLY

+0

あなたは何をしようとしているのか詳細を教えてください。 – LukeH

+0

プログラムを終了しますか? –

+0

私はうまく動作するウィンドウのようなカスタムタスクバーを作成しています。しかし、アプリケーションを閉じると、タスクバーが占有する領域がブロックされます。だから私はGCを強制したい。以下の説明から私はいくつかのものを理解した。しかし、それをグローバルにどこで呼び出すのですか? – Anuya

答えて

1

次の操作を行うことにより、ガベージコレクションを強制することができます。これは、想定している

GC.Collect(); 
GC.WaitForPendingFinalizers() 

あなたはIDisposableパターンに従ってください。コードサンプルにはかなりのものがありますdetailed article on the IDisposable pattern

+1

ガベージコレクションを強制することはめったに正しいことではありません。それは実際にはいくつかの状況でオブジェクトの生涯を促進することができます... –

+1

"これはあなたが' IDisposable'パターンに従うことを前提としています - 二つは接続がほとんどありません... –

+0

このアプローチはIDisposableを必要とせず、 IDisposableの適切な実装と使用は、この問題の根底にある問題を解決します。 –

5

プロセスを終了

+0

私は、OPが使用されているリソースを残したいと思っていると仮定しています... –

+5

質問には愚かな答えでしたが、私はこの質問がより大きなレベルの腐敗。 – spender

2

さて、あなたは*(GC.Collect)ガベージコレクションを強制することができ、それはDispose()と同じではありません - あなたのコードがそれを見ることができれば(それを配置する)、そしてもちろん、それは収集することはできません。だからあなた自身を追跡する余分なモデルを導入することは、生産性を低下させる可能性があります。

usingブロックを適切に使用して、コードがIDisposableリソースを「所有している」ことを知っていることを確認することをおすすめします。 システムブラシ(など)は、独自のカスタムブラシとは異なる扱いをする必要があるため、これはペン/ブラシ/などで少し厄介です。

* =とミッチノートのように、これはまれに正しいことです。私は通常、テスト・リグのGC.Collectを使用して、テスト・サイクル間で物事を平坦化します。実動コードではありません。

+1

@Marc:ガベージコレクションを強制することはめったに正しいことではないことに言及する価値があるかもしれません。それは実際にいくつかの状況でオブジェクトの寿命を促進することができます... –

+0

+1、質問の背後にある問題に答える。 –

関連する問題