在我的网站中,我有一个 ObjectContextStorage,它将所有 ObjectContext 保存在其中。 http 请求完成后,我丢弃此存储(将其从 HttpContext.Current.Items 中删除)并在此存储中处置 ObjectContext。
现在,当我调试并查看 ObjectContext 的 _objectTypeCount 时,当我重新加载网站时,它会不断升高,而我会认为旧的 ObjectContext 已被处置?
为什么旧的ObjectContext在处理后仍然在我的内存中?
最佳答案
您正在观看 ObjectContext
类的静态变量:
private static int _objectTypeCount; // Bid counter
internal readonly int ObjectID = System.Threading.Interlocked.Increment(
ref _objectTypeCount);
我不知道这样做的目的是什么。 (它计算在应用程序或 session 生命周期内创建 ObjectContext 的频率,或者其他什么???)
但是由于它是静态,因此您无法从不断增加的计数器得出您的ObjectContext
实例尚未从内存中删除的结论。
编辑
这个计数器和代码中的ObjectID
显然与所谓的BID tracing有关。 。 “BID”代表“内置诊断”。上述内部代码构造出现在许多 ADO.NET 类中。它仅用于跟踪这些类中的方法调用,并出现在如下跟踪函数中:
EntityBid.Trace("<ec.EntityCommandDefinition.CreateCommand|ADV> %d#\n",ObjectID);
_objectTypeCount
和 ObjectID
只是为类型实例提供名称(或唯一 ID)以用于跟踪输出。
除了跟踪之外,它在 ObjectContext
类内部没有任何功能意义。
关于c# - Entity Framework - 处置后的 _objectTypeCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068095/