我知道存储在Session中的数据是活动的,直到用户关闭浏览器,而存储在Items中的数据处于活动状态,直到处理请求/响应为止。
我也知道,如果我调用Session.Abandon(),它将使Session的行为类似于Items。
我做了一些测试,我在第一种情况下在Session中放置了一个实体框架DbContext(以保持与sql服务器的连接),在第二种情况下在Items中,所以如果它不存在我实例化它,否则我从其中一个存储器中获取它。
我看到来自Session的上下文查询比来自Items的上下文查询更快。
这很奇怪,因为我在两种情况下从上下文中检查了Dispose()方法,并且在会话或项目结束时按预期调用它。
现在,如果我正在调用Session.Abandon(),那么就执行速度而言,两种情况下的查询都是相同的。
这里发生了什么,为什么我要面对这种情况?
答案 0 :(得分:1)
由于上下文已经存在,并且查询已经执行,因此可能会缓存它,这反过来会缩短执行时间。
您应该阅读有关冷和热查询的信息,以及它对您的应用程序可能产生的影响。
第一次针对给定模型进行任何查询时, 实体框架在幕后加载和做了很多工作 验证模型。我们经常将此第一个查询称为 "冷"查询。针对已经加载的模型的进一步查询 被称为"温暖"查询,速度更快。