.NET などのcom Interopオブジェクトを使用するには、リソースの漏れやメモリの問題を防ぐために慎重に処理する必要があります。 不適切な処分は、プロセスを実行して不要なメモリを消費する可能性があります。
問題:不完全な廃棄ApplicationClass
を呼び出すだけでは、Excel Interopオブジェクトを完全にリリースするのに十分ではないかもしれません。 この問題は、これらのオブジェクトとの対話方法に起因することがよくあります。
「連続したドットを避けてください」ベストプラクティスSystem.Runtime.InteropServices.Marshal.ReleaseComObject
)を使用して複数のメンバーアクセスをチェーンすると、問題が発生する可能性があります。 C#コンパイラは、マネージドラッパーを作成します。これは、明示的にリリースされていなくても、基礎となるcomオブジェクトへの参照を保持できます。 ソリューション:明示的な変数割り当て推奨されるアプローチは、さらに相互作用する前に、各comオブジェクトアクセスの結果を個別の変数に割り当てることです。 直接
を呼び出す代わりに、最初に変数にexcelApp.Worksheets.Open(...)
を割り当てます。
これにより、明確な管理されたラッパーが作成され、。
正しい廃棄を示す例: excelApp.Worksheets.Open(...)
excelApp.Worksheets
以下の改訂コードスニペットは、正しい廃棄手法を紹介します:
<code class="language-csharp">Worksheets sheets = excelApp.Worksheets; // Assign to a variable Worksheet sheet = sheets.Open(...); // ... your code ... Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(sheet);</code>この方法を使用することにより、COMオブジェクトへのすべての参照がリリースされ、メモリリークが妨げられ、クリーンなアプリケーションのシャットダウンが確保されるようにします。 最適なクリーンアップのために、作成の逆の順序でオブジェクトをリリースすることを忘れないでください。
以上がメモリリークを防ぐために.NETでExcel Interopオブジェクトを適切に処分する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。