1

我已经部署了一个带有 Co-located 缓存的 Azure WebRole。我正在为客户端使用以下默认配置。

<dataCacheClient name="default">
  <autoDiscover isEnabled="true" identifier="[name]" />
  <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
</dataCacheClient>

目前我每次访问缓存时都会运行以下代码

DataCacheFactory CacheFactory = new DataCacheFactory(); _Cache = CacheFactory.GetDefaultCache();

这会导致我的应用程序池经常终止。如何DataCacheFactory在需要时重新使用它。

提前致谢

4

1 回答 1

2

我建议您使用ASP.NET 应用程序状态来保留 DataChache 工厂对象。

您可以编写一个帮助类来获取数据缓存工厂对象。类似的东西(从未测试过):

public class DataCacheHelper
{
    public DataCacheHelper()
    {
        DataCacheFactory factory = new DataCacheFactory();
        HttpContext.Current.Application.Lock();
        HttpContext.Current.Application["dcf"] = factory;
        HttpContext.Current.Application.Unock();
    }

    public DataCacheFactory GetFactory()
    {
        var factory = HttpContext.Current.Application["dcf"];
        if (factory == null)
        {
            factory = new DataCacheFactory();
            HttpContext.Current.Application.Lock();
            HttpContext.Current.Application["dcf"] = factory;
            HttpContext.Current.Application.Unock();
        }
        return factory;
    }
}

或者,如果您使用的是 ASP.NET MVC - 您可以创建一个具有 GetCacheFactory 方法的基本控制器类(这正是辅助方法所做的),并让您的所有控制器继承此基础而不是框架之一。Web 表单也可以实现相同的目标。

于 2013-05-30T11:19:42.267 回答