2009-06-15 63 views
0

我想調試一些資源泄漏 - 特別是oracle連接。安裝Visual Studio是否在.Net中更改垃圾回收?

在我的本地機器上,當我遍歷Page_Load()時,可以通過監視v $ session來查看db中創建的連接。

只要我離開Page_Load,所有連接都關閉。

在開發服務器(W3k,IIS6)上運行的相同代碼不會釋放資源 - 根據db的連接仍然存在。

我已經試過這個有和沒有連接池啓用,它是相同的 - 本地很好,在它泄漏的服務器上。

我已經驗證.net框架在兩個地方是相同的&代碼也是一樣的。我錯過了什麼?

回答

2

垃圾收集器有三種不同的操作模式:服務器GC,工作站GC併發和工作站GC非併發。每個人都以不同的方式行事,並針對不同類型的應用程序進行了優化。這可能是導致不同行爲的原因。具體而言,根據是否有單個或多個CPU,給定設置的行爲可能會發生變化。請看Tess Ferrandez的博客以獲得更詳細的解釋。

+0

我們在三臺機器上進行了實際測試,看起來每臺機器都使用三種不同的方案之一。感謝您的解釋! – chris 2009-06-18 01:17:35

0

每當您在.NET中使用有限的資源(如數據庫連接)並期望清理資源時,應該在對象上顯式調用Dispose()以確保清理並正確釋放。

至於Visual Studio更改垃圾回收,我不明白爲什麼會這樣。垃圾收集器的行爲可能會有所不同,因爲您在具有不同內存配置文件的不同計算機上運行。您不能指望垃圾收集器以任何已定義的方式運行,特別是在機器上。但它看起來像沒有正確處理數據庫連接有更大的問題。

+0

嗯,我認爲我們正在處理一切正常 - 我現在試圖解釋爲什麼相同的代碼在不同的服務器上工作不同。 – chris 2009-06-15 21:59:16