none
Application,Session,Cache共享变量,如何决择? RRS feed

  • 常规讨论

  • 首先说Application吧,应用程序状态,可以说是全局的吧,存在于ASP.NET或者ASP.NET MVC的生命周期里面,阶非程序毁坏或者重启动.用它来保存变量,时间长.不敏感的数据.
    再来说Session吧,会话状态,默认的是时间长是20分钟吧,如果在浏览器20分钟没有做出任何响应,会话状态消息,里面保存的数据也随之消失了.这个可以用来保存一些敏感的数据,时间不长的.
    最后说Cache吧.缓存==相当重要.这个可以自己设定时间长的有效期的,灵活度比较高.
    好了,这是我理解的概念,当然可能口述不清.不要见怪.
    比如我现在做的一个MVC程序,ViewPage,Controller,ViewMasterPage.我分别用三个类继承他们.比如叫BaseViewPage,BaseController,BaseViewMasterPage.然而这三个类可能存在共享的变量.比如User,或者一些其他的.那么这时,我们应该用哪种来做他们三个的共享变量的媒介呢?如果是User,我觉得用Session吧,User毕竟是敏感的数据.
    然后一些其他的数据呢,比如一个产品的分类数据.假如我们在业务逻辑写了一个外观模式吧,叫MiddleTier吧,表示层都是通过MiddlerTier来访问数据吧,比如我们访问产品的分类表数据MiddlerTier.ProductManager.GetCategories();
    我们在三个继承的类里面都要一个变量middleTier,但要他们是一致的.那么这时用Application如何?时间长,有效.(在业务逻辑层,MiddlerTier可能用了双重锁定).
    那么Cache在什么环境下用呢?个人认为,从配置文件里面的读出来的数据,比如Site的一些相关信息,此时可以用它来.
    具体的性能不知道如何,有空做一下测试吧.
    不知道有谁有另外的想法,一起来讨论一下吧.


    cdjboy
    2009年5月13日 14:23

全部回复

  • 没有通用的规范。你需要根据你当前项目的需求文档来决定。
    MSMVP VC++
    2009年5月13日 18:09
    版主
  • Session是会话级别的对象,每个会话都不同 Application,Cache是全局级别的对象,每个会话都可以访问。并且这2个对象功能类似,但是Cache功能更强大,具体Cache的用法,可以参照 msdn和google的例子
    【孟子E章】
    2009年5月14日 7:09
    版主