1、HttpContext.Current.Item是对访问的所有用户共享吗?还是只针对当前访问的用户?
2、HttpContext.Current.Cache是对访问的所有用户共享吗?还是只针对当前访问的用户?
3、如果HttpContext.Current.Cache是对所有用户共享的话,那么和Application有什么区别呢?
谢谢!

解决方案 »

  1.   

    另外HttpContext.Current.Cache和System.Web.Caching有什么区别呀?这两个都可建立Cache,但有什么区别呀,谢谢!
      

  2.   

    1、是针对当前http请求,任何请求的用户都可以共享;
    2、是所有用户;
    3、Cache比Application变量更灵活,比如:Cache有优先级,如果内存紧张,优先级低和很少用的Cache将被从内存中转移到硬盘上保存;可以定义Cache的过期时间;可以定义依赖项来确保Cache中数据的有效性,等等。
      

  3.   

    System.Web.Caching是命名空间,HttpContext.Current.Cache是当前http请求的System.Web.Caching.Cache类的实例。
      

  4.   

    webdiyer(陕北吴旗娃),感谢你的解答。
    我在《C# WEB编程入门经典》中看到介绍,说对于页面的各个用户控件之间的数据交流,推荐采用HttpContext.Current.Item(书中称为暂存)。
    但是如果按照你所说的任何请求的用户都可以共享的话,那岂不是会发生冲突?比如假设我在HttpContext.Current.Item保存了一个数据,即当前的用户名,即:
    HttpContext.Current.Item["username"] = "abc";
    这样的话,如果HttpContext.Current.Item是任何请求的用户都可以共享的话,数据就会发生冲突,那么就要出问题哟。
      

  5.   

    楼主需要注意一点是Item只是HttpContext的一个属性。
    也就是说这个属性是针对一次请求而言的,每个用户每次发出的请求都会建立一个HttpContext的实例,所以不存在什么用户共享的问题。
    一般,Item只是用于控件开发的时候存储一些共有的值,在下一次请求到来的时候item中的值又会重新建立的.
      

  6.   

    SuperFC(●捡分e族●) 说得精辟!
      

  7.   

    SuperFC(●捡分e族●) ,谢谢你的解答。让我明白了。
    那么HttpContext.Current.Cache呢
      

  8.   

    多谢老大鼓励,偶一定努力学习...嘿咻嘿咻 :)HttpContext.Current --->相当于对当前请求的Context实例的一个引用。
    也就是HttpContext类提供的一个属性让你取道当前的Context类的实例。那么那个Catch属性就好找了,也就是HttpContext.Cache的属性,看看MSDN吧,里面还有sample
      

  9.   

    HttpContext.Current.Cache为当前 HTTP 请求获取 Cache 对象。
    对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性来提供。这样看来,应该是所有用户共享了,呵呵!
      

  10.   

    其实我所有的问题的归结点就在于对这个的理解。HttpContext.Current --->相当于对当前请求的Context实例的一个引用。这个“当前请求”,对每个用户每次访问都是一个新的请求吗?比如,假设两个用户在同时并发访问,这是一个请求还是两个请求,只要这个搞清楚了,这些问题就清楚了。谢谢!