gpt4 book ai didi

asp.net - .NET 4.0 ObjectCache 的线程安全和范围管理

转载 作者:行者123 更新时间:2023-12-02 03:18:45 26 4
gpt4 key购买 nike

我正在使用新的 .NET 4.0 缓存 API, ObjectCache 。过去几天我就这个领域提出了一些问题,并且我已经暗示过这个问题 - 但认为值得将其分解为自己的问题。

因为类是抽象的并且所有方法都是虚拟的,这意味着我们可以创建自己的自定义缓存提供程序。

根据 MSDN,ObjectCache 不必是单例,您可以在应用程序中创建它的多个实例。

但是对我来说,这听起来像是我们还需要管理这个对象的实例化和生命周期?

我有一个 ASP.NET MVC 3 Web 应用程序,带有 StructureMap作为我的依赖注入(inject)容器。

我希望为我的整个 Web 应用程序提供一个共享的缓存。

因此,我创建了一个非常简单的类,它包装了 ObjectCache 类,并在方法实现中提供了拆箱功能。

该类在构造函数中获取一个 ObjectCache 实例,并将其设置为缓存的私有(private)静态实例,该实例的方法(Add、Get 等)下类了。

例如

public class CacheManager
{
private static ObjectCache _cache;

public CacheManager(ObjectCache cache)
{
_cache = cache;
}

// Add, Get, Remove methods work off _cache instance.
}

现在,这是我的 DI 注册表:

For<CacheManager>().Singleton().Use<CacheManager>().Ctor<ObjectCache>("cache").Is(MemoryCache.Default);

英文:当请求 CacheManager 实例时,使用单例实例,并将 ObjectCache 参数设置为 MemoryCache 实例。

这就是我所拥有的,现在是问题:

  1. 如果我有一个类来包装 ObjectCache,该类是否需要是单例?
  2. MSDN 说 ObjectCache 是线程安全的,但现在我使用的是单例,我是否需要任何类型的锁定来保持线程安全?
  3. 我的包装类中 ObjectCache 的私有(private)实例是否需要是静态的?类本身是否需要是静态的?
  4. 对我的整体实现的总体想法?

我一直无法找到关于 ASP.NET Web 应用程序中的 .NET ObjectCache 的像样的博客/文章,因此我很困惑。

我习惯使用HttpContext.Current.Cache(这是静态的)并且不关心缓存的生命周期管理。

最佳答案

  1. MemoryCache.Default是一个单例,你的无状态类实际上不需要是一个。然而,这完全取决于你。
  2. 您不需要锁定 ObjectCache 实例。
  3. 不,不。将其设为静态不会提供任何值(value)。在 StructureMap 中指示它是单例使得 GetInstance<>()无论如何总是返回相同的对象。
  4. 包装的真正值(value) ObjectCache将抽象缓存实现,以便您可以更改它或模拟它。如果没有接口(interface),这将变得不太有用。

下面是一个示例实现...

public interface ICacheManager
{
// add, get, remove, etc
}

public class CacheManager : ICacheManager
{
private static ObjectCache _cache;

public CacheManager(ObjectCache cache)
{
_cache = cache;
}

// Add, Get, Remove methods work off _cache instance.
}

然后...

For<ICacheManager>()
.Singleton()
.Use<CacheManager>();

For<ObjectCache>()
.Use(MemoryCache.Default);

如果您想更改仍然是 ObjectCache 的缓存提供程序以后调整起来就容易了。

希望这会有所帮助!

关于asp.net - .NET 4.0 ObjectCache 的线程安全和范围管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com