我有一個IIS 2.0下的ASP.NET 2.0應用程序,其功能爲 將一些數據導出到名爲HFM(Oracle Hyperion財務管理)的軟件中。 要執行導出,.net應用程序使用基於HFM客戶端提供的COM對象的API(客戶端安裝在與服務器等相同的機器上).NET強制COM對象發佈
我的問題是API提供了方法連接到HFM服務器,但不要斷開連接。
該文檔說,要斷開連接,應用程序必須在創建的每個COM對象上調用方法Marshal.ReleaseComObject()。 但是,執行了很多複雜的操作,我無法釋放所有創建的對象。
所以我的應用程序不會斷開連接。
我注意到,當我替換ASP.NET應用程序的dll文件(似乎重新啓動由.NET實例化的對象)時,應用程序會自動斷開連接。
我打了幾次撥打:
GC.Collect();
GC.WaitForPendingFinalizers();
但問題仍然存在。 我正在尋找一種方法來確保創建任何對象,甚至COM對象都被釋放。 我試過Marshal.FinalReleaseComObject()但它不是更好。
當我在該部分放置一個lock()時,該部分總是最多有一個用戶,所以我甚至可以使用硬核技術來釋放COM對象。
有沒有辦法知道哪個對象或者至少沒有被釋放的對象的類型?
感謝您的幫助。
在徹底的分析和過程簡化之後,你說得對,我們注意到一些對象沒有正確釋放。 這是問題的原因。 – 2010-07-14 14:27:37