M4N*_*M4N 82
一个重要的区别是,缓存中的项目可能会在指定的时间后过期(将从缓存中删除).放入会话的项目将保留在那里,直到会话结束.
当可用内存量变小时,ASP.NET还可以从缓存中删除项目.
另一个区别是:会话状态可以保持在外部(状态服务器,SQL服务器)并在Web应用程序的多个实例之间共享(用于负载平衡).缓存不是这种情况.
除了这些差异(正如其他人已经注意到的):会话是按用户/会话,而缓存是每个应用程序.
Mar*_*rke 28
AFAIK,关键区别在于会话是针对每个用户的,而缓存将针对应用程序范围的项目.
如其他答案中所述,您可以在缓存中存储每个用户信息,前提是您提供密钥(通过会话或cookie).然后,您将拥有更多控制权来使缓存中的项目失效,并设置对它们的依赖关系.因此,如果有问题的DataTable会定期更改,那么缓存可能是一个合适的选择.否则,如果是静态会话可能更合适.史蒂芬史密斯有一个关于dnrtv缓存的优秀视频,值得一试.
这取决于你想要达到的目标,你有多少时间.关于如何在应用程序中存储状态,还有一些其他选择需要考虑.根据表的大小,您可以考虑将状态存储在cookie中(如果是敏感信息则加密).或者,如果它是应用程序作用域数据,则冷使用页面或类上的静态字段.还有Application对象.
更新:我认为你必须问自己的关键问题是谁应该看到这些数据.
Are they going to access the data frequently?
Run Code Online (Sandbox Code Playgroud)
(不,不要打扰).
Is it going to change?
Run Code Online (Sandbox Code Playgroud)
(不,使用静态字段或应用程序).
Is it acceptable for user a and user b to see the same results?
Run Code Online (Sandbox Code Playgroud)
(不,使用包含用户名和搜索词的密钥的缓存.).
(是的,使用搜索词的键来使用缓存).
老实说,如果你在开发过程中不远,我会考虑将缓存/状态问题暂时停放 - 你甚至可能不需要它.
性能调优的前三个规则是:1.测量,2.测量更多.3.再次测量......
那么它取决于你如何为ASP.NET配置会话.您是将会话存储在数据库还是内存中?如果在内存中您使用的是单独的服务器,或者您正在使用当前的Web服务器进行会话?
根据为您设置的方式,当您使用类似数据表的内容时,可能会对性能产生影响,这会告诉您可能正在存储大量数据.
会话也按用户存储,并且每个用户通过会话票据检索,如果他们不接受cookie并且您已将ASP.NET设置为无cookie模式,则会话票据存储在会话cookie或URL中.您缓存的任何内容都将在应用程序级别进行缓存,并且可供所有用户会话使用,这些会话可能是您想要的,也可能不是.
会话是针对每个用户的,缓存是针对应用程序的。
缓存中的项目可以并且将会根据过期时间(滑动或固定)和 IIS 工作进程的内存限制自动删除。
因此基本上缓存中的项目永远不会保证存在,但会话将保留在那里直到会话结束。
基于每个用户存储项目(通过会话或创造性地使用缓存)可能会导致大量内存使用,应仔细考虑。
最重要的是,如果 IIS 重置工作进程,您可能会丢失缓存和会话。
| 归档时间: |
|
| 查看次数: |
70414 次 |
| 最近记录: |