上述所有内容的适当用例是什么?看起来会话和缓存非常相似,我想不出应用程序有多大用处。
答案 0 :(得分:101)
应用程序和会话状态有一个非常重要的区别:
应用程序状态是ASP.NET应用程序中所有类都可用的数据存储库。应用程序状态存储在服务器的内存中,比在数据库中存储和检索信息更快。 与会话状态(特定于单个用户会话)不同,应用程序状态适用于所有用户和会话。因此,应用程序状态是存储少量常用数据的有用位置,这些数据不会从一个用户更改为另一个用户
Application State Overview
Session State Overview
Caching Application Data Overview
尽管它们可能看起来很相似,但它们明显是分开的,并且在最广泛的意义上在ASP.NET应用程序中扮演不同的角色。
答案 1 :(得分:20)
会话是每个用户。它不在用户之间共享。
应用程序和缓存范围是应用程序范围。缓存可以过期。如果您有可以更改的数据,请说5分钟,您可以将其放在缓存中,而如果您的数据没有定期更新,则可以放置在应用程序变量中。
答案 2 :(得分:6)
会话用于特定于用户的信息。通常,您会保存用户名,用户首选项,如屏幕名称,购物车ID(如果您要销售任何东西),电子邮件等
当您拥有所有人共享的信息时,通常会使用缓存。通常是减少数据库的长进程或命中。 IE你要显示前n篇文章。您可以为此设置时间限制,因此它将在一段时间后刷新日期
应用程序变量适用于要保存在服务器上的静态信息。这可能是媒体文件所在位置。
答案 3 :(得分:2)
这些答案都不足以说明Cache的一个非常重要的属性 - 它具有应用程序范围,并且所有用户都共享!您存储在缓存中的任何数据都可供所有用户使用。您仍然可以将数据存储在您希望仅供特定用户使用的缓存中,但您必须使用该用户唯一的缓存键值,例如Cache.Add("UserData" + userID, data...
答案 4 :(得分:1)
内置的inproc会话对象有一个非常重要的限制,其他答案都没有指出,这限制了它在高并发网站中的使用。具体来说,如果更改代码中的任何会话项,请求将停止并等待,直到完成对会话对象的所有读取请求。在这种情况下,缓存是一个更好的选择:
I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it