2011-08-15 26 views
2

在我的網站中,我有一個ObjectContextStorage,它保留了所有的ObjectContext。在http請求完成後,我扔掉這個存儲(將它從HttpContext.Current.Items中移除)並將ObjectContexts置於此存儲中。實體框架 - 處理後的_objectTypeCount

現在,當我調試並查看我的ObjectContext的_objectTypeCount時,它會不斷提高,當我重新加載我的網站,而我會認爲舊的ObjectContext被放置?

爲什麼舊的ObjectContext在處理後仍然在我的記憶中?

回答

5

你正在看ObjectContext類的靜態變量:

private static int _objectTypeCount; // Bid counter 
internal readonly int ObjectID = System.Threading.Interlocked.Increment(
                 ref _objectTypeCount); 

我不知道什麼是這樣做的目的。 (據統計多久的ObjectContext的已應用程序或會話有效期,或什麼???期間創建)

但因爲它是靜態你不能從不斷增加的反認爲你的ObjectContext情況下沒有已從內存中刪除。

編輯

此計數器,並在代碼中ObjectID顯然與所謂的BID tracing向。 「BID」代表「內置診斷」。上面的內部代碼結構出現在許多ADO.NET類中。它被用於只爲追蹤在這些類的方法調用和發生在跟蹤功能是這樣的:

EntityBid.Trace("<ec.EntityCommandDefinition.CreateCommand|ADV> %d#\n",ObjectID); 

_objectTypeCountObjectID只是那裏給一個類型的名稱的一個實例(或唯一的ID),用於跟蹤輸出。

除了追蹤它在ObjectContext類中沒有功能意義。

+0

感謝您的回覆,並對已故的意見感到抱歉。有沒有另外一種方法來查看ObjectContext當前在內存中有多少實例? – Julian

+0

@ Julian:不幸的是我不知道。我相信'ObjectContext'在這個問題上並不特別。這可能歸結爲一個問題:「如何檢查一個對象是否仍在內存中或已經被垃圾收集?」或者什麼......我對.NET系統基礎結構的瞭解不足以自己回答這個問題。將是一個有趣的新問題:) – Slauma