2010-12-07 9 views
1

私のC#コードでリソースをクリーンアップしようとしています。ここでリソースをクリーンアップ

はコードです:

finally 
{ 
object[] myarray = new object[5] { globalRelation, asset, surfaceRelationNew, termStructureSlice, equipRelation }; 

CleanupResource(myarray); 
} 


private void CleanupResource(params object[] objs) 
{ 
      for (int count = 0; count < objs.Length; count++) 
       { 
        if (objs[count] != null) 
        { 
         Marshal.ReleaseComObject(objs[count]); 
        } 

       } 
} 

はこれです良いアプローチですか? または、配列を渡してからそれをループするのではなく、オブジェクトごとにCleanupResource()メソッドを呼び出す必要があります。

お勧めします。

+0

ガベージコレクタを信頼してください。 http://blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –

答えて

2

は、これらのアンマネージドリソースですか?

globalRelation, asset, surfaceRelationNew, termStructureSlice, equipRelation 

ノーならば、私はypuが正しくそれをやっているが、なぜあなたは別々のメソッドを呼び出していると言うだろうよりも、このアンマネージリソースは、ちょうどfinallyブロックで解放する場合は、心配する必要性についてCLRのヘンデルこの

せません

または

そのokieが場合は、下記のようなあなたのクラスGCedのオブジェクトを、それを解放する場合は、クラスのデストラクタを書くことができます。

~MyClass() 
{ 
    Marshal.ReleaseComObject(globalRelation); 
    Marshal.ReleaseComObject(asset); 
    Marshal.ReleaseComObject(surfaceRelationNew); 
    Marshal.ReleaseComObject(termStructureSlice); 
    Marshal.ReleaseComObject(equipRelation); 
} 
+0

はい、これらはすべてアンマネージドリソース[COMオブジェクト]です。 – user74042

関連する問題