HttpContext.Current.Session和HttpContext.Current.Items之间的区别是什么?

时间:2015-02-09 09:47:37

标签: asp.net asp.net-mvc entity-framework dispose

我知道存储在Session中的数据是活动的,直到用户关闭浏览器,而存储在Items中的数据处于活动状态,直到处理请求/响应为止。

我也知道,如果我调用Session.Abandon(),它将使Session的行为类似于Items。

我做了一些测试,我在第一种情况下在Session中放置了一个实体框架DbContext(以保持与sql服务器的连接),在第二种情况下在Items中,所以如果它不存在我实例化它,否则我从其中一个存储器中获取它。

我看到来自Session的上下文查询比来自Items的上下文查询更快。

这很奇怪,因为我在两种情况下从上下文中检查了Dispose()方法,并且在会话或项目结束时按预期调用它。

现在,如果我正在调用Session.Abandon(),那么就执行速度而言,两种情况下的查询都是相同的。

这里发生了什么,为什么我要面对这种情况?

1 个答案:

答案 0 :(得分:1)

由于上下文已经存在,并且查询已经执行,因此可能会缓存它,这反过来会缩短执行时间。

您应该阅读有关冷和热查询的信息,以及它对您的应用程序可能产生的影响。

Cold vs warm queries

  

第一次针对给定模型进行任何查询时,   实体框架在幕后加载和做了很多工作   验证模型。我们经常将此第一个查询称为   "冷"查询。针对已经加载的模型的进一步查询   被称为"温暖"查询,速度更快。