.NET MemoryCache示例

这个示例展示了一个简单的内存缓存实现,展示了自定义缓存的基础知识,不应该在生产环境中使用。

在文档服务源代码中,替换其中的代码ServiceHelper。CreateCache:

c#
_cache =MemoryCache ()

cs(将这个测试类添加到文档服务项目中)

c#
使用Leadtools.Caching;使用系统;使用System.Collections.Concurrent;使用System.Collections.Generic;名称空间MyNamespace公共MemoryCache: ObjectCache//缓存。字符串|对象的并发字典私人ConcurrentDictionary最后<字符串对象> _cache =ConcurrentDictionary最后<字符串对象> ();////这些成员必须由我们的类实现,并由Document工具箱调用////我们的名字公共覆盖字符串名字得到返回“内存缓存”//我们只支持二进制序列化。实际上,我们既不支持策略也不支持序列化,但是我们返回Binary//通知任何呼叫者不要给我们发送任何JSON数据公共覆盖CacheSerializationMode PolicySerializationMode得到返回CacheSerializationMode.Binary;NotSupportedException(由于);公共覆盖CacheSerializationMode DataSerializationMode得到返回CacheSerializationMode.Binary;NotSupportedException(由于);//我们没有特别的额外支持公共覆盖DefaultCacheCapabilities DefaultCacheCapabilities得到返回DefaultCacheCapabilities.None;公共覆盖CacheItem AddOrGetExisting(CacheItem item, CacheItemPolicy policy)如果(项目= =ArgumentNullException (“项目”);//解析键,记住,我们没有区域varResolveKey = ResolveKey(项目。RegionName item.Key);CacheItem oldItem =//尝试获取旧值//是的,保存旧值返回给用户对象oldPayload;如果(_cache。TryGetValue (resolvedKeyoldPayload))oldItem =CacheItem < T >(项目。Key, (T)oldPayload, item.RegionName);//设置新数据_cache。TryAdd (resolvedKey item.Value);//返回旧项目返回oldItem;公共覆盖CacheItem < T > GetCacheItem < T > (字符串键,字符串regionName)//如果我们有一个带有此键的项,则返回它。否则,返回nullvarresolvedKey = ResolveKey(regionName, key);CacheItem item =对象有效载荷;如果(_cache。TryGetValue (resolvedKey有效载荷)项=CacheItem(key, (T)payload, regionName);返回项;公共覆盖保龄球包含(字符串键,字符串regionName)//检查键是否在字典中varresolvedKey = ResolveKey(regionName, key);varexists = _cache.ContainsKey(resolvedKey);返回存在;公共覆盖保龄球UpdateCacheItem < T > (CacheItem < T >项)//更新项目如果(项目= =ArgumentNullException (“项目”);varResolveKey = ResolveKey(项目。RegionName item.Key);varexists = _cache.ContainsKey(resolvedKey);如果(存在)_cache[resolvedKey] = item.Value;返回存在;公共覆盖T删除< T > (字符串键,字符串regionName)//如果存在,则返回旧值varresolvedKey = ResolveKey(regionName, key);对象有效载荷;varremove = _cache。TryRemove (resolvedKey有效载荷);返回删除吗?(T)有效载荷:默认的(T);公共覆盖无效DeleteItem (字符串键,字符串regionName)//如果存在则删除varresolvedKey = ResolveKey(regionName, key);对象有效载荷;_cache。TryRemove (resolvedKey有效载荷);私人静态字符串ResolveKey (字符串regionName,字符串键)//两个字符串都必须为非空字符串如果字符串.IsNullOrEmpty (regionName))InvalidOperationException (“地区名称必须是非空字符串”);如果字符串.IsNullOrEmpty(关键))InvalidOperationException ("区域键名必须是非空字符串");//我们是一个没有分组的简单字典。regionName可能不是唯一的,key也可能不是唯一的,而是将它们组合在一起//我们保证有一个唯一的密钥返回regionName +“-”+关键;公共覆盖无效UpdatePolicy (字符串key, CacheItemPolicy策略字符串regionName)//无事可做////这些成员必须由我们的类过度实现,但绝不会被Documents工具包调用//抛出一个不支持的异常////这是默认区域支持。我们没有公共覆盖对象字符串例子)得到NotSupportedException(由于);NotSupportedException(由于);//一次性删除一个区域我们对此不支持//注意:只有当我们有DefaultCacheCapabilities.CacheRegions时才会被调用。因为我们不这样做,所以调用者负责//调用DeleteAll传递区域的所有项目(依次调用每个项目的DeleteItem)公共覆盖无效DeleteRegion (字符串regionName)NotSupportedException(由于);//开始添加外部资源我们对此不支持//注意:只有当我们有DefaultCacheCapabilities时才会调用。ExternalResources公共覆盖Uri BeginAddExternalResource (字符串键,字符串regionName,保龄球读写)NotSupportedException(由于);//结束添加外部资源。我们对此不支持//注意:只有当我们有DefaultCacheCapabilities时才会调用。ExternalResources公共覆盖无效EndAddExternalResource < T > (保龄球提交,字符串key, T值,CacheItemPolicy策略,字符串regionName)NotSupportedException(由于);//获取项目外部资源。我们对此不支持//注意:只有当我们有DefaultCacheCapabilities时才会调用。ExternalResources公共覆盖Uri GetItemExternalResource (字符串键,字符串regionName,保龄球读写)NotSupportedException(由于);//删除项目外部资源。我们对此不支持//注意:只有当我们有DefaultCacheCapabilities时才会调用。ExternalResources公共覆盖无效RemoveItemExternalResource (字符串键,字符串regionName)NotSupportedException(由于);//获取项目虚拟目录路径我们对此不支持//注意:只有当我们有DefaultCacheCapabilities时才会调用。VirtualDirectory公共覆盖Uri GetItemVirtualDirectoryUrl (字符串键,字符串regionName)NotSupportedException(由于);//获取缓存中的条目数。我们对此不支持公共覆盖GetCount (字符串regionName)NotSupportedException(由于);/ /统计数据。我们对此不支持公共覆盖CacheStatistics GetStatistics ()NotSupportedException(由于);/ /统计数据。我们对此不支持公共覆盖CacheStatistics GetStatistics (字符串键,字符串regionName)NotSupportedException(由于);//获取所有的值。我们对此不支持公共覆盖IDictionary <字符串对象> getvalue (IEnumerable <字符串>键,字符串regionName)NotSupportedException(由于);//项目的枚举。我们对此不支持受保护的覆盖IEnumerator < KeyValuePair <字符串对象> > GetEnumerator ()NotSupportedException(由于);//键的枚举我们对此不支持公共覆盖无效EnumerateKeys (字符串区域,EnumerateCacheEntriesCallbackNotSupportedException(由于);//区域的枚举。我们对此不支持公共覆盖无效EnumerateRegions (EnumerateCacheEntriesCallback回调)NotSupportedException(由于);

LEADTOOLS成像、医疗和文档
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。