2017-12-18 1 views
-1

私のコードでは、FileInfo/StreamWriterクラスのオブジェクトを作成する必要があります。 それは、二つの方法tryまたはtryの内部でクラスオブジェクトを宣言しますか?どちらがベストプラクティスです

FileInfo file = null; 
try 
{ 
// now instantiate the object 
file = new FileInfo() 
} 

それとも

try 
{ 
FileInfo file = null; 
file = new FileInfo() 
} 

より良いですで行うことができますか? GCがオブジェクトを処分する方法に違いはありますか?

+3

_scope_は、表示されている2つの例の違いです。それ以外のところは、どちらのアプローチをとっているのかということが曖昧です。 –

+0

@Aominèスコープとは別に、GCがどのように処理するかの違いがあります。テクニカルSMEとのディスカッションがありましたが、try GCの内部で宣言されている場合は、try GCの実行後直ちにオブジェクトを収集します。一方、外部を定義すると、メソッド呼び出しが終了してもかなりの時間待つことになります。 私は彼と完全に同意していません。メソッドの実行が終了するとすぐに私が外に宣言すれば、それはGCによって収集されます。 –

+1

それは違いはありません、GCは宣言によって混乱しないほどスマートです。背後にある[ここにある](https://stackoverflow.com/a/17131389/17034)。 –

答えて

5

です。 tryブロックの外側にあるfileにアクセスする必要がありますか?答えが "で、いずれの場合も"でない場合は、tryブロック内に宣言することをお勧めします。答えは「はい、私のcatchまたはfinallyブロックでどこかのコードの後半オン」である場合、あなたtryブロックの外側にそれを宣言する必要があります。

パフォーマンスの影響については、すでに問題を忘れてください。

最後に、GCは、何も配置しません。 DisposalとGCは2つの無関係なものです。GCは、使い捨て可能なオブジェクトとIDisposableインターフェイスについては何も知らないです。

+0

@MongZhu hehe、lol。 – InBetween

+0

@InBetween try以外でtryを使用していない場合、tryブロックの外側で宣言すると、パフォーマンスに違いがあります。 GCはどのように機能しますか? –

+0

@RavindraMehta no。 – InBetween

関連する問題