这个示例展示了一个简单的内存缓存实现,展示了自定义缓存的基础知识,不应该在生产环境中使用。
在文档服务源代码中,替换其中的代码ServiceHelper。CreateCache:
_cache =新MemoryCache ()
cs(将这个测试类添加到文档服务项目中)
使用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;}}公共覆盖CacheItemAddOrGetExisting (CacheItem item, CacheItemPolicy policy) {如果(项目= =零)扔新ArgumentNullException (“项目”);//解析键,记住,我们没有区域varResolveKey = ResolveKey(项目。RegionName item.Key);CacheItemoldItem =零; //尝试获取旧值//是的,保存旧值返回给用户对象oldPayload;如果(_cache。TryGetValue (resolvedKey出oldPayload))oldItem =新CacheItem < T >(项目。Key, (T)oldPayload, item.RegionName);//设置新数据_cache。TryAdd (resolvedKey item.Value);//返回旧项目返回oldItem;}公共覆盖CacheItem < T > GetCacheItem < T > (字符串键,字符串regionName){//如果我们有一个带有此键的项,则返回它。否则,返回nullvarresolvedKey = ResolveKey(regionName, key);CacheItemitem =零; 对象有效载荷;如果(_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 (字符串区域,EnumerateCacheEntriesCallback{扔新NotSupportedException(由于);}//区域的枚举。我们对此不支持公共覆盖无效EnumerateRegions (EnumerateCacheEntriesCallback回调){扔新NotSupportedException(由于);}}}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗网络查看器net
188宝金博怎么下载
支持的平台上
.NET、Java、Android和iOS/macOS程序集
C API/ c++类库
HTML5 JavaScript库
您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。
聊天时间:
周一至周五,美国东部时间上午8:30至下午6:00
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。
