从我的另一个问题中脱离出来。 .NET Garbagecollector trouble. Blocks for 15-40 mins
我想创建一个简单的持久缓存。为简单起见,所有内容都会保留。我目前使用ImmutableDictionary<int,DataItem>
实现了这个,但我对垃圾收集器有问题。
似乎我认为我使用了大量数据,因为它包含10 000-100 000个复杂对象,然后它开始认为经常扫描缓存是一个好主意。阻止第2代。至少我相信它的作用。 &#34;%gc&#34;是90%以上,我的申请很快。
我可以以某种方式将缓存标记为不可触摸或让我的应用在GC认为它应该完全收集之前使用更多内存吗?我在服务器上有大量可用内存。
切换到NCache或Redis for Windows(MSOpenTech)可能是更好的解决方案吗?
答案 0 :(得分:0)
您可以使用GC.TryStartNoGCRegion严格限制GC发生的次数。虽然符合我之前的评论,但我认为这不是一个好方法。
您是否考虑过检查缓存对象如何清理自己?也许当物体超过4小时ttl时,清理它们需要太长时间?
物体是否是一次性的?他们可以最终确定吗?如果是任何一个,是什么,对单个对象的Dispose或Finalize操作的时间成本是多少?如果他们是Finalizable,他们需要是吗?