【问题标题】:MemoryCache over Threads线程上的内存缓存
【发布时间】:2015-04-26 11:17:39
【问题描述】:

我目前正在研究一些具有缓存层的代码,该缓存层在底层使用 MemoryCache 类。这是一个 c# Windows 服务应用程序,所以不是 web/IIS。有一段代码产生了许多线程,在这些线程中它在 POC 中创建并执行一些代码以执行一些计算。然后将它们存储在上述缓存层中。所看到的是,缓存值似乎是按线程存储的,而不是在 apiation 级别。我认为 MemoryCache 是一个位于单个线程之外的单例。

任何人都可以确认这种行为是正常的吗?

非常感谢任何 cmets。

【问题讨论】:

    标签: c# multithreading service memorycache


    【解决方案1】:

    MemoryCache 是线程安全的,但没有理由假设它是单例。如果您希望不同的线程访问同一个 MemoryCache 实例,您需要为它们提供对同一个实例的引用(作为单例(非常糟糕)static(仍然很糟糕)或通过作为依赖注入的参数传递(好)) .

    简单的方法(确实使用全局状态)是访问默认内存缓存:

    var cache = MemoryCache.Default; // not really a good idea and harder to test, works
    

    您可以find the specific docs here。确保configure it in your app/web.config file

    【讨论】:

    • 您说全局状态不好,但您的示例显示了如何从全局成员中检索它,嗯..
    • @YuvalItzchakov 我正在提供 OP 替代方案(全局和 DI),以及我对它们的看法(DI 是理智的,全局是非常糟糕的)。我把它留给OP来决定。我不能在这里真正演示 DI,也不在这个答案的范围内教它 - 所以我尽我所能通过倡导它而不是全局状态。
    • 我认为使用构造函数注入注入它的一个小例子不会花费太多时间 :) 但你是对的,这不是问题的主要目标。
    • 试试推特。我根本不使用我的 FB。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2010-10-27
    相关资源
    最近更新 更多