我可以对.NET4的MemoryCache进行迭代吗?
我正在使用System.Runtime.Caching.MemoryCache提供的缓存. 我想枚举缓存的项目,以便我可以将(驱逐然后重新加载)项目无效 foreach (var item in MemoryCache.Default) { item.invalidate() } 但是,官方文档在这里发现 state state state: ! 资源密集型和阻塞操作.因此,枚举者应该 不适用于生产应用. 肯定必须有一种简单有效的方法来迭代缓存项目? 解决方案 到目前为止提出的建议很棒,但是我的需求仍然如下所述:迭代缓存项目.这似乎是一项简单的任务,我希望该缓存在内部具有某种列表结构. MemoryCache的文档和功能集都想要. 因此,如上所述,我在高速缓存适配器类中添加了一个列表,该类别对我在缓存中放置的每个项目都有一个参考.如果我需要迭代缓存 - 不仅是为了无效,而是要收集统计信息等 - 然后我迭代我的列表. 如果放置在缓存中的项目数
0 2024-04-17
编程技术问答社区
C#: 如何实现智能缓存
我在某些地方实施某种缓存可能很有用.例如,在基于自定义字符串进行资源查找的情况下,使用反射找到属性的名称,或者每个属性名称只有一个PropertyChangedEventArgs. 最后一个的简单示例: public static class Cache { private static Dictionary cache; static Cache() { cache = new Dictionary(); } public static PropertyChangedEventArgs GetPropertyChangedEventArgs( string propertyName) { if (cache.ContainsKey(propert
0 2024-04-17
编程技术问答社区
EF6 使用命令树拦截器禁用查询计划缓存
我正在使用IDbCommandTreeInterceptor来实现软削弱功能.在标准TreeCreated方法中,我检查给定的查询命令是否包含具有软删除属性的模型.如果他们这样做并且用户也要求提供软删除的对象 - 我用querySoftDeleted = true致电我的软删除访问者.这将使我的查询返回所有对象,那些具有true的对象以及IsDeleted属性上的false值的对象. public class SoftDeleteInterceptor : IDbCommandTreeInterceptor { public void TreeCreated(DbCommandTreeInterceptionContext interceptionContext) { ... bool shouldFetchSoftDeleted = context != null && context.ShouldFetchSof
0 2024-04-17
编程技术问答社区
在.NET内存缓存中通过CacheItemPolicy使一个缓存项目失效
我对cacheitempolicy上的绝对毒性属性感到困惑. 但是,如果您查看 dateTimeOffsoffsect说它"代表了一个时间点……相对于协调的通用时间(UTC)."还参考此您看到问题了吗? Absoluteexpiration期望"时间段"(例如5秒或2个小时),但它需要一个代表"时间点"的对象(如12月21日,2012年12月21日,06:14:00 EST). 在下面的代码中,我为所有项目定义了一个策略.我希望每个项目都在添加后cacheExpiryInSeconds秒.有人可以验证我以正确的方式做吗? public class MyCache : IRoutingInfoCache { MemoryCache _routingInfoCache; CacheItemPolicy _cachePolicy; public MyCache(int cacheExpiryInSeconds) { _rou
0 2024-04-17
编程技术问答社区
Stack Overflow、Redis和缓存失效
现在,堆栈溢出使用了redis,它们是否以相同的方式处理缓存无效?即标识列表hash hash hash to查询字符串 +名称(我想名称是某种目的或对象类型名称). 也许他们然后通过ID直接检索了从高速缓存中缺少的单个项目(绕过一堆数据库索引并使用更有效的群集索引).那会很聪明(杰夫提到的补液?). 现在,我正在努力寻找一种以简洁的方式旋转所有这些方法的方法.有什么例子是我可以用来帮助澄清自己的思想的例子吗? 另外,我想知道使用.NET缓存(system.runtime.caching或system.web.caching)与外出并使用redis之间的截止位置.还是redis只是更快地放下手? 这是2009年的原始问题: - Does-stackoverflow handle-cache-Invalidation 其他几个链接: .com/esporate/69164/do-stackoverflow-use-caching-and-if-so
0 2024-04-17
编程技术问答社区
dotnet core中的内存缓存
我正在尝试编写一个类来处理.NET核心类库中的内存缓存.如果我不使用核心,那么我可以写 using System.Runtime.Caching; using System.Collections.Concurrent; namespace n{ public class MyCache { readonly MemoryCache _cache; readonly Func _cachePolicy; static readonly ConcurrentDictionary _theLock = new ConcurrentDictionary(); public MyCache(){ _cache = MemoryCache.Default; _cachePolicy
0 2024-04-17
编程技术问答社区
.Net 4内存缓存的泄漏与并发垃圾回收
我正在使用新的 MOMEME A> In .NET 4,MB的最大高速缓存尺寸限制(我已经测试了它在10到200MB之间的设置,在1.75到8GB之间的系统上).我不会在对象上设置任何基于时间的到期,因为我仅将缓存用作高性能驱动器,只要有空间,我就希望使用它. 令我惊讶的是,缓存拒绝驱逐任何对象,以至于我会得到SystemOutOfMemory例外. . 我启动了 perfmon ,将我的应用程序连接到.Net CLR Memory\#Bytes In All Heaps,.Net Memory Cache 4.0和Process\Private Bytes - 的确,记忆消耗已经失控,并且没有缓存装饰注册. 做了一些 google 和 stackoverfroving ,下载并附加了 clrprofiler 和 wham :到处都是驱逐!根据我设置的内存尺寸限制,内存保持在合理的范围内.再次以调试模式运行它,没有驱逐.再次,clrprofiler,驱逐. 我终于注意到,
0 2024-04-17
编程技术问答社区
Azure函数和缓存
我们正计划开发一个Azure功能,输入触发器是服务总线消息,并且输出将是BLOB存储.服务总线消息将包含一个图像URL,该功能将将图像大小调整到预定义的分辨率,并将上传到Azure Blob存储. 在数据库中存储了应该调整图像大小的分辨率,并且Azure功能需要调用数据库,以了解输入消息中应该用于图像的分辨率.该分辨率实际上是根据输入消息源配置的主数据. 进行数据库调用将是一个昂贵的调用,因为它必须访问每个调用数据库.有没有任何方法可以缓存数据并使用它而无需调用数据库.喜欢内存缓存? 解决方案 您可以自由使用在其他.NET应用程序中使用的通常方法: 您可以在内存中缓存.最简单的方法只是声明静态词典并将数据库值放在其中(如果需要时使用并发词典).将在同一实例上运行的所有后续函数执行重复使用缓存值.如果实例闲置5分钟,或者应用程序缩放到额外的实例,则必须再次读取数据库; 您可以使用分布式缓存,例如REDIS,使用其功能代码中的SDK.因为您保持函数的无状态性质
0 2024-04-17
编程技术问答社区
对于一个.NET 4的网络应用,是选择System.Web.Caching还是System.Runtime.Caching?
我将缓存添加到ASP.NET Web应用程序中.这是.NET 4,因此我可以使用System.Runtime.Caching名称空间中的类(据我所知,它添加了与System.Web.Caching中找到的功能相似的功能,但对于非Web--应用程序.) 但是,由于此是一个Web应用程序,我最好使用system.web.caching?还是较新的系统. 解决方案 Microsoft建议使用System.Runtime.Caching用于所有缓存目的.请参阅: dd997357.aspx ,尽管我遇到了几个线程,人们在其中遇到了remoneCache.default实例.一段时间后,它停止正常工作.您使用add或set方法添加的任何项目实际上都不会添加到缓存中.我尝试了相同的操作,并且能够使用明确调用MemoryCache.default.dispose()方法来重现此问题. 这是链接: memoryCache empty:设置后返回null http://foru
0 2024-04-17
编程技术问答社区
使用MemoryCache而不是普通的Dictionary<string,object>有哪些令人信服的理由?
我刚刚遇到 memoryCache "> memorycache .net 4. 我知道,如果您想: 限制缓存的总内存使用 有一个对象的对象(生存时间),以便您放入缓存的对象 是否还有其他令人信服的理由可以在标准Dictionary 上使用MemoryCache 我有几本关于c#和.net的书,在任何地方都没有提及. 解决方案 我认为您确定了两个令人信服的原因: - ) MemoryCache具有驱逐策略,因此它可以抛出不再需要的条目,或者您不再有足够的内存. 字典不会"丢失内容". 更新: MemoryCache是​​线程安全,并具有诸如AddorgetExisting之类的方法.使用词典,您必须同步访问自己(或使用contrentDictionary).
0 2024-04-17
编程技术问答社区
ASP.Net 缓存
我已经在文件(XML)上实现了缓存,该文件已发送到图形控件以渲染它. 但是,我被告知要以一种可以轻松打开和关闭的方式实现缓存(这意味着在web.config中设置一个值). . 有没有一种方法可以根据Web.config文件中的值打开和关闭缓存?谢谢你! @oded您提供的代码不适合我的情况,因为我必须重写现有代码: if(bool.parse(confi.... == "true"){ if(Cache[x] == null){ load the XML document and insert it into the Cache object } else{ get the xml document from the Cache object. } } 否则通过从对象中重新加载文档来重复自己. 我确定有更好的解决方案. 解决方案 只需检查config文件中的密钥的值. in appSettings部分:
0 2024-04-17
编程技术问答社区
在使用HQL进行批量更新/删除后,我是否必须刷新实体?
我编写了一些DAO方法,可以使用HQL进行大量更新/删除,但是我看到,当查询执行时,内存中的实体未被统一(未更新缓存). . 说,我有一系列项目的集合,每个项目都有一个集团,我想删除所有组.我可以迭代组并删除每个组,但我更喜欢在HQL和运营商中运行批量删除.但是,该列表执行查询后具有旧对象. 我意识到我必须用session.refresh()刷新对象.还有其他方法可以自动进行更新和更新缓存吗? 解决方案 答案是否.如下所示: 13.3. DML风格的操作 引用: ...如已经讨论过的那样,自动和透明的对象/关系映射与对象状态的管理有关. 这意味着对象状态可在内存,中可用EM> 数据库中的数据不会影响内存状态.但是,NHIBERNATE提供了通过Hibernate查询语言(HQL)执行的批量SQL风格DML语句执行的方法... dml在那里,可以跳过内存中的状态管理...从SQL语句的角度来看,更有效.但这意味着: 操纵...数据库中的数
0 2024-04-17
编程技术问答社区
本地数据缓存同步不保存客户端的变化到sdf文件中
我创建了一个新的C#项目,并从本教程中引起了步骤,以创建LocalDataCache: http://www.codeproject.com/kb/database/adosyncservicesarticalpkg.aspx?fid=1526739&df=90&mpp = 25&mppp = 25&noise = 3&sort = posity = position = position= positi i接下来添加以下代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TestLocalSync { public part
0 2024-04-17
编程技术问答社区
本地数据缓存同步不保存客户端的变化到sdf文件中
我创建了一个新的C#项目,并从本教程中引起了步骤,以创建LocalDataCache: http://www.codeproject.com/kb/database/adosyncservicesarticalpkg.aspx?fid=1526739&df=90&mpp = 25&mppp = 25&noise = 3&sort = posity = position = position= positi i接下来添加以下代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TestLocalSync { public part
0 2024-04-17
编程技术问答社区
asp.net自定义缓存的依赖性,在一个时刻刷新全部内容
我有一个自定义的缓存依赖关系 class MyCacheDependency : CacheDependency { private const int PoolInterval = 5000; private readonly Timer _timer; private readonly string _readedContent; public MyCacheDependency() { _timer = new Timer(CheckDependencyCallback, this, PoolInterval, PoolInterval); _readedContent = ReadContentFromFile(); } private void CheckDependencyCallback(object sender) { lock (_timer)
0 2024-04-16
编程技术问答社区
.Net 缓存过期
在我的项目中,我们使用Web服务从数据库中获取数据,并将数据从Web服务填充到缓存. 我使用的是绝对有效期,持续时间设置为4小时. 因此,在4个小时后,缓存到期,因此请Web服务重新填充缓存中的数据. 现在发生的问题是: 有时在Web服务和数据库之间建立连接存在问题,因此Web服务不会返回数据. 在这种情况下,缓存填充了所有字段的空值,最多4个小时的缓存(直到其再次到期的时间). 我正在寻找两种类型的解决方案: 1)我们可以在该缓存到期之前续订缓存,然后致电Web服务.如果Web服务获取数据,请覆盖缓存. 2)缓存永不过期,每隔一段时间我们都会产生一个线程,如果我们收回数据,该线程会更新缓存. 但我不确定如何实施上述解决方案?有人可以让我了解技术部分吗?感谢您的帮助! 我当前的填充缓存代码: ctx.Cache.Insert("cachename", cacheValue, null, DateTime.Now.Add
0 2024-04-16
编程技术问答社区
在asp.net core中以编程方式清除缓存文件
我在我的ASP.NET Core Web API中设置了一个缓存配置文件,如下所示: services.AddMvc(options => { // Cache profile for lookup data will expire every 15 minutes. options.CacheProfiles.Add("LookupData", new CacheProfile() { Duration = 15 }); }); 我在" LookupScontroller"的顶部使用了此属性,因为每种方法中返回的信息列表不会定期更改(尽管缓存每15分钟自动到期). [ResponseCache(CacheProfileName = "LookupData")] [Produces("application/json")] [Route("api/Lookups")] public class LookupsController : Contr
0 2024-04-16
编程技术问答社区
为什么Directory.GetFiles()在随后的运行中运行得更快?
我不太确定是什么原因导致了这一点,所以如果找不到搜索中所需的信息,请原谅我.这是一个示例: 假设我们有一个带有1,000,000个文件的文件夹.运行Directory.getFiles()将需要几分钟.但是,在此之后再次运行将只需几秒钟.为什么会发生这种情况?物体是否被缓存在某个地方?我如何在原始时间运行它? 解决方案 硬盘驱动器具有内部缓存,将有助于加快随后的读取.尝试在完全不同的扇区中读取许多其他目录信息以清除缓存.
0 2024-04-16
编程技术问答社区
.Net Windows应用程序中的缓存
我正在基于Windows的应用程序中使用,该应用程序使用每个事务的主数据.此主数据通常不会改变,但在某些情况下可能会发生变化.我将这些数据获取到缓存或DataSet一次,然后将其用于将来的交易,但如果在主表中更改了数据,则不想使用时间从数据库中提取数据. . 我想对DataTable创建一个依赖性,以便如果数据仅在此时更改,则从数据库中获取信息.由于它是一个基于Windows的应用程序,而且我没有在Windows应用程序中找到任何支持缓存的支持,因此如何通过缓存或DataSet? 来执行此操作. 解决方案 "因为这是一个基于Windows的应用程序,我没有在Windows应用程序中找到任何支持缓存的支持" 这是错误的. 您可以在框架4.0中获得缓存类.它可以是基于Windows的应用程序或基于Web的应用程序.这是示例: using System.Runtime.Caching; private static MemoryCache cache =
0 2024-04-15
编程技术问答社区
谁能给我解释一下这块ASP.NET MVC的代码吗?
这是ASP.NET MVC2(RTM)System.Web.Mvc.AuthorizeAttribute类中的当前代码: - public virtual void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (this.AuthorizeCore(filterContext.HttpContext)) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; cache.SetProxyMaxAge(new TimeSpan(0L)); cache.AddValid
0 2024-04-15
编程技术问答社区