1
 private Obj CacheSomething()
    {
       Obj retVal = (Obj)System.Web.HttpRuntime.Cache["key"];

        if (retVal == null)
        {
            retVal = new Obj();
            System.Web.HttpRuntime.Cache["key"] = retVal;
        }
        return retVal;
    }

这可能是一个愚蠢的问题,但它是存储在服务器内存还是客户端内存中?

另外,执行上述操作和使用单例有什么区别?

例如:

myObj= GenericSingleton<Obj>.GetInstance();

myObj= CacheSomething();

当我每次声明一个新对象时显然需要更长的时间,但是上述两种方法都比不缓存和不使用单例要快。使用单例基本上是缓存吗?

4

3 回答 3

4

它缓存在服务器上。最显着的区别是,由于内存压力,或者因为您在插入时指定了过期或依赖关系信息,可以从缓存中逐出项目。

于 2012-12-10T16:19:27.570 回答
1
  1. System.Web.HttpRuntime.Cache是服务器端的。

  2. 使用Singleton模式时,您通常编写期望单例实例存在的代码。使用缓存项,您永远不能依赖它的存在,并且应该相应地编写代码。例如,如果retVal创建是一个时间/资源消耗,你应该lock防止其他线程做同样的工作来构造它。

于 2012-12-10T16:22:35.757 回答
0

它缓存在服务器上。从课堂手册:

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。

你可以在这里找到它:缓存类

于 2012-12-10T16:22:30.897 回答