避免使用C#Excel Interop
避免持續的Excel進程>與C#中的Excel Interop合作需要仔細管理COM對象,以防止應用程序完成後揮之不去的Excel流程。 雖然一些開發人員在循環中使用Marshal.ReleaseComObject
,然後是垃圾收集,但這並不總是足夠的。 這個問題通常源於訪問com對象的方式。
雙點危險
>直接訪問COM對象成員,而無需將它們分配給變量(例如,excelApp.Worksheets.Open(...)
)會創建一個隱藏的參考,以防止正確清理。 C#創建了一個包裝器,但該包裝器尚未發布,保持Excel運行。
解決方案:顯式變量分配
關鍵是在使用其成員之前始終將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>。
Marshal.ReleaseComObject
>調試注意事項
請記住,調試者可以乾擾垃圾收集。 在調試期間觀察到的揮之不去的Excel過程可能無法反映發布構建中的實際行為。 始終在不附帶的調試器的情況下徹底測試您的清理。
以上是如何有效地清理C#中的Excel Interop對象,以防止Excel過程揮之不去?的詳細內容。更多資訊請關注PHP中文網其他相關文章!