缓存 – 有没有办法在Microsoft Enterprise Library中创建多个Ca
发布时间:2020-12-14 03:57:48 所属栏目:Windows 来源:网络整理
导读:我们正在尝试迁移以使用Microsoft Enterprise Library – 缓存块.但是,缓存管理器初始化似乎与配置文件条目紧密相关,我们的应用程序即时创建内存“容器”.无论如何,使用预先配置的值集(仅限内存)可以动态实例化高速缓存管理器的实例. 解决方法 Enterprise Li
我们正在尝试迁移以使用Microsoft Enterprise Library – 缓存块.但是,缓存管理器初始化似乎与配置文件条目紧密相关,我们的应用程序即时创建内存“容器”.无论如何,使用预先配置的值集(仅限内存)可以动态实例化高速缓存管理器的实例.
解决方法
Enterprise Library 5具有
fluent configuration,可以轻松地以编程方式配置块.例如:
var builder = new ConfigurationSourceBuilder(); builder.ConfigureCaching() .ForCacheManagerNamed("MyCache") .WithOptions .UseAsDefaultCache() .StoreInIsolatedStorage("MyStore") .EncryptUsing.SymmetricEncryptionProviderNamed("MySymmetric"); var configSource = new DictionaryConfigurationSource(); builder.UpdateConfigurationWithReplace(configSource); EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 不幸的是,您似乎需要一次配置整个块,因此您无法动态添加CacheManagers. (当我在同一个构建器上调用ConfigureCaching()两次时会抛出异常.)您可以创建一个新的ConfigurationSource,但之后会丢失以前的配置.也许有一种方法可以检索现有配置,修改它(例如添加一个新的CacheManager)然后替换它?我找不到办法. 另一种方法是直接使用缓存类. 以下示例使用Caching类来实例化两个CacheManager实例并将它们存储在静态Dictionary中.不需要配置,因为它没有使用容器.我不确定这是个好主意 – 对我来说感觉有点不对劲.这很简陋,但希望有所帮助. public static Dictionary<string,CacheManager> caches = new Dictionary<string,CacheManager>(); static void Main(string[] args) { IBackingStore backingStore = new NullBackingStore(); ICachingInstrumentationProvider instrProv = new CachingInstrumentationProvider("myInstance",false,new NoPrefixNameFormatter()); Cache cache = new Cache(backingStore,instrProv); BackgroundScheduler bgScheduler = new BackgroundScheduler(new ExpirationTask(null,instrProv),new ScavengerTask(0,int.MaxValue,new NullCacheOperation(),instrProv); CacheManager cacheManager = new CacheManager(cache,bgScheduler,new ExpirationPollTimer(int.MaxValue)); cacheManager.Add("test1","value1"); caches.Add("cache1",cacheManager); cacheManager = new CacheManager(new Cache(backingStore,new ExpirationPollTimer(int.MaxValue)); cacheManager.Add("test2","value2"); caches.Add("cache2",cacheManager); Console.WriteLine(caches["cache1"].GetData("test1")); Console.WriteLine(caches["cache2"].GetData("test2")); } public class NullCacheOperation : ICacheOperations { public int Count { get { return 0; } } public Hashtable CurrentCacheState { get { return new System.Collections.Hashtable(); } } public void RemoveItemFromCache(string key,CacheItemRemovedReason removalReason) {} } 如果到期和清理策略相同,那么最好创建一个CacheManager然后使用一些智能密钥名来表示不同的“容器”.例如.密钥名称可以采用“{container name}:{item key}”格式(假设冒号不会出现在容器或密钥名称中). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 窗口 – 为什么UTF-8不允许作为“ANSI”代码页?
- windows – 太字节数据的异地备份
- windows-vista – 获取Vista Ultimate 64位的HDD(和NOT Vol
- 如何在不重新启动的情况下添加Windows环境变量?
- Windows应用商店应用 – WinJS:0x800a1391 – JavaScript运
- 在Win32中,size member(cb)名称实际上是什么意思?
- Windows Python版本和VC可再发行版本
- windows – Win64异常堆栈走不显示条目
- DLL不能在C#中工作
- windows-server-2012 – 由于磁盘空间不足而禁用Hyper-V暂停
推荐文章
站长推荐
- Windows虚拟机是否也受到熵短缺的影响?
- windows-7 – 如何在Windows中始终显示程序托盘图
- windows-server-2012 – 如何更改指定的AD控制器
- windows – 如何查找登录到Active Directory中的
- windows – 删除图像元数据中的“程序名称”
- Windows 8应用程序是否运行符合标准的JavaScript
- active-directory – 有没有Sysinternals ADInsi
- windows-server-2008-r2 – 来自安全事件日志的X
- 玩框架蝙蝠windows java进程
- Windows – Visual Studio 2012“无效的许可证数
热点阅读