在我的网站中,我有一个ObjectContextStorage,它将所有ObjectContext保存在其中。在http请求完成后,我扔掉了这个存储(从HttpContext.Current.Items中删除它)并将ObjectContexts部署在这个存储中。
现在当我调试并查看我的ObjectContext的_objectTypeCount时,它会在我重新加载我的网站时不断提高,而我会认为旧的ObjectContext被处理了?
为什么旧的ObjectContext在处理之后仍然在我的内存中?
答案 0 :(得分: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);
_objectTypeCount
和ObjectID
就是为了给类型的实例提供一个名称(或唯一ID)来跟踪输出。
除了跟踪之外,它在ObjectContext
类中没有任何功能意义。