实体框架 - 处理后的_objectTypeCount

时间:2011-08-15 17:07:19

标签: c# asp.net entity-framework dispose

在我的网站中,我有一个ObjectContextStorage,它将所有ObjectContext保存在其中。在http请求完成后,我扔掉了这个存储(从HttpContext.Current.Items中删除它)并将ObjectContexts部署在这个存储中。

现在当我调试并查看我的ObjectContext的_objectTypeCount时,它会在我重新加载我的网站时不断提高,而我会认为旧的ObjectContext被处理了?

为什么旧的ObjectContext在处理之后仍然在我的内存中?

1 个答案:

答案 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);

_objectTypeCountObjectID就是为了给类型的实例提供一个名称(或唯一ID)来跟踪输出。

除了跟踪之外,它在ObjectContext类中没有任何功能意义。