相关疑难解决方法(0)

MemoryCache线程安全,锁定是否必要?

首先让我把它扔出去,我知道下面的代码不是线程安全的(更正:可能).我正在努力的是找到一个实现,并且我实际上可以在测试中失败.我现在正在重构一个大型WCF项目,它需要一些(大部分)静态数据缓存并从SQL数据库中填充.它需要每天至少过期和"刷新"一次,这就是我使用MemoryCache的原因.

我知道下面的代码不应该是线程安全的,但我不能让它在繁重的负载下失败,并且使谷歌搜索显示两种方式的实现变得复杂(有和没有锁结合辩论,无论它们是否必要.

在多线程环境中具有MemoryCache知识的人可以让我明确地知道我是否需要在适当的地方锁定,以便在检索/重新填充期间不会抛出删除调用(很少被调用但是它的要求).

public class MemoryCacheService : IMemoryCacheService
{
    private const string PunctuationMapCacheKey = "punctuationMaps";
    private static readonly ObjectCache Cache;
    private readonly IAdoNet _adoNet;

    static MemoryCacheService()
    {
        Cache = MemoryCache.Default;
    }

    public MemoryCacheService(IAdoNet adoNet)
    {
        _adoNet = adoNet;
    }

    public void ClearPunctuationMaps()
    {
        Cache.Remove(PunctuationMapCacheKey);
    }

    public IEnumerable GetPunctuationMaps()
    {
        if (Cache.Contains(PunctuationMapCacheKey))
        {
            return (IEnumerable) Cache.Get(PunctuationMapCacheKey);
        }

        var punctuationMaps = GetPunctuationMappings();

        if (punctuationMaps == null)
        {
            throw new ApplicationException("Unable to retrieve punctuation mappings from the database.");
        }

        if (punctuationMaps.Cast<IPunctuationMapDto>().Any(p => p.UntaggedValue …
Run Code Online (Sandbox Code Playgroud)

c# wcf multithreading memorycache

73
推荐指数
4
解决办法
5万
查看次数

在Web API中缓存数据

我需要缓存在ASP.NET Web API OData服务中可用的大部分是静态的(可能每天更改1次)的对象集合.此结果集用于跨调用(意味着不是特定于客户端调用),因此需要在应用程序级别缓存它.

我做了一些关于'在Web API中缓存'的搜索,但所有结果都是关于'输出缓存'.这不是我在这里寻找的.我想缓存一个'People'集合,以便在后续调用中重用(可能有一个滑动到期).

我的问题是,由于这仍然只是ASP.NET,我是否使用传统的应用程序缓存技术将此集合持久存储在内存中,或者我还需要做些什么呢?此集合直接返回给用户,而是通过API调用用作OData查询的幕后源.我没有理由在每次通话时都去数据库,以便在每次通话时获得完全相同的信息.每小时到期应该足够了.

任何人都知道如何在这种情况下正确缓存数据?

caching odata asp.net-web-api

37
推荐指数
2
解决办法
4万
查看次数

MemoryCache在MVC中的用途是什么?

我对MemoryCache的正确使用感到困惑.

应该/可以用来加载静态信息以节省重复呼叫吗?应该/可以用它来跨多个操作方法在视图上保存数据吗?

我有一个实例,我不想使用数据存储来填充和保存我的视图中的数据.我开始使用MemoryCache工作正常,但我开始怀疑这是否是正确的方法.

我担心的是如果我使用相同的MemoryCache在同一页面上有多个用户会发生什么?

c# asp.net-mvc

11
推荐指数
1
解决办法
1万
查看次数