我在.NET4.0和c#中使用.net内存缓存,我希望在删除项目时通知我的应用程序(这样我就可以将它已删除写入日志文件或通知UI,该项目已被删除)。有没有办法做到这一点。我使用的是System.Runtime.Caching.MemoryCache而不是System.Web.Caching 最佳答案 编辑:如果您使用的是System.Runtime.Caching.MemoryCache,则有一个callback在CacheItemPolicy对象上删除,以及一个更新。myMemoryCache.Set("key",null,new
我对MemoryCache的正确使用有点困惑。它应该/可以用于加载静态信息以节省重复调用吗?它应该/可以用于跨多个操作方法在View上持久保存数据吗?我有一个实例,我不想使用数据存储在我的View中填充和保留数据。我开始使用工作正常的MemoryCache,但是我开始质疑这是否是正确的方法。我担心的是,如果我在同一页面上有多个用户使用相同的MemoryCache,会发生什么情况? 最佳答案 首先,MemoryCache是System.Runtime.Caching命名空间的一部分。它可以被MVC应用程序使用,但不限于MVC应用程序。
MemoryCache默认带有一个默认缓存,并且可以创建额外的命名缓存。在不同的实例中隔离不同进程的结果缓存似乎有优势例如,针对索引的查询结果可以缓存在“IndexQueryResult”缓存中,而数据库查询的结果可以缓存在“DatabaseQueryResult”中缓存。这有点做作,但解释了原理。导致驱逐的一个缓存上的内存压力是否会影响其他缓存?.Net管理多个缓存的方式与其管理一个缓存的方式有何不同?我是在浪费时间考虑多个缓存的想法,还是这样做有真正的值(value)? 最佳答案 我无法回答前几个问题,但我很想知道这些问题的答案
MemoryCache是否有任何通用的替代方案/实现?我知道MemoryCache在底层使用Hashtable,所以只需转换为使用Dictionary,这是Hashtable的通用版本。这将提供类型安全并提供性能优势,因为无需装箱/拆箱。编辑:我感兴趣的另一件事是使用不同的key类型。默认值为System.String。 最佳答案 Isthereanygenericalternative/implementationforMemoryCache?不在基类库中。你必须自己动手,但就我个人而言,我只会围绕MemoryCache做一个包装
我目前正在尝试.Net4中的新MemoryCache以在我们的一个应用程序中缓存一些数据。我遇到的问题是对象已更新并且缓存似乎正在保留更改,例如publicIEnumerableGetFromDatabase(){conststring_cacheKeyGetDisplayTree="SomeKey";ObjectCache_cache=MemoryCache.Default;varobjectInCache=_cache.Get(_cacheKeyGetDisplayTree)asIEnumerable;if(objectInCache!=null)returnobjectInCac
我正在使用新的.NET4.0缓存命名空间:System.Runtime.Caching。现在,我只是在对新的API进行一些原型(prototype)设计/摆弄,以便找出最适合实际应用的东西。与此一致,我正在尝试创建一个页面(ASP.NETMVC),该页面基本上会转储缓存中的所有内容,尤其是以下信息:缓存键缓存对象缓存策略(过期日期等)缓存依赖项(如果有的话)但是,除了键/对象,我似乎什么也得不到。这是我目前正在使用的代码:publicActionResultIndex(){varcache=MemoryCache.Default;//icangetthelistofcachekeysl
我正在将一些代码从.NET4.6移植到.NETCore,但在使用MemoryCache时遇到了一些问题。4.6代码使用MemoryCache.Default来实例化缓存,但这在.NETCore中似乎不可用。在.NETCore中是否有与此等效的东西,或者我应该将自己的MemoryCache更新为单例并通过IOC注入(inject)它? 最佳答案 System.Runtime.Caching.MemoryCache和Microsoft.Extensions.Caching.Memory.MemoryCache是完全不同的实现。它们很相似
我正在使用aspnetcore1.0和xunit。我正在尝试为一些使用IMemoryCache的代码编写单元测试。但是,每当我尝试在IMemoryCache中设置一个值时,我都会收到Null引用错误。我的单元测试代码是这样的:IMemoryCache被注入(inject)到我要测试的类中。但是,当我尝试在测试中的缓存中设置一个值时,我得到了一个空引用。publicTestGetSystemUnderTest(){varmockCache=newMock();returnnewTest(mockCache.Object);}[Fact]publicvoidTestCache(){vars
我需要添加缓存功能并找到了一个名为MemoryCache的新类。但是,我发现MemoryCache有点残缺(我需要区域功能)。除其他事项外,我需要添加类似ClearAll(region)的内容。作者努力让这个类没有区域支持,代码如下:if(regionName!=null){thrownewNotSupportedException(R.RegionName_not_supported);}几乎适用于所有方法。我没有看到一种简单的方法来覆盖这种行为。我能想到的添加区域支持的唯一方法是添加一个新类作为MemoryCache的包装器,而不是作为继承自MemoryCache的类。然后在这个新
我创建了一个使用.NETMemoryCache的异步缓存。这是代码:publicasyncTaskGetAsync(stringkey,Func>populator,TimeSpanexpire,objectparameters){if(parameters!=null)key+=JsonConvert.SerializeObject(parameters);if(!_cache.Contains(key)){vardata=awaitpopulator();lock(_cache){if(!_cache.Contains(key))//Checkagainbutlockedthist