C#Excel Interop
を使用して永続的なExcelプロセスを回避します C#でExcel Interopを使用すると、アプリケーションが終了した後に長引くExcelプロセスを防ぐために、COMオブジェクトを慎重に管理する必要があります。 一部の開発者は、ループでを使用していますが、ゴミコレクションが続きますが、これは必ずしも十分ではありません。 問題は、多くの場合、COMオブジェクトにアクセスする方法に起因します。
Marshal.ReleaseComObject
変数に割り当てることなく、COMオブジェクトメンバーに直接アクセスする(例:
)は、適切なクリーンアップを防ぐ隠された参照を作成します。 C#はラッパーを作成しますが、このラッパーはリリースされず、Excelを実行し続けます。excelApp.Worksheets.Open(...)
ソリューション:明示的な変数割り当てキーは、メンバーを使用する前に常に変数にcomオブジェクトを割り当てることです。
これにより、オブジェクトの寿命を明示的に制御できるため、。
考慮事項のデバッグ<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>デバッガーはゴミコレクションを妨げる可能性があることを忘れないでください。 デバッグ中に観察される長引くExcelプロセスは、リリースビルドでの実際の動作を反映していない場合があります。 デバッガーが添付されずに、常にクリーンアップを徹底的にテストしてください。
以上が長引くExcelプロセスを防ぐために、C#でExcel Interopオブジェクトを効果的にクリーンアップするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。