gpt4 book ai didi

c# - 大对象缓存

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:37 24 4
gpt4 key购买 nike

我有一个 .NET2.0 C# 网络应用程序。它有数量可变的大的、初始化开销大的对象,这些对象在多个请求之间共享,但不与任何给定用户进行 session 。因此,我需要将它们保存在查找结构中。这些对象需要根据需要创建,并且在应用程序的生命周期内不是必需的,只是它们的使用生命周期是必需的。

加一点。

内存泄漏的方法是一个简单的字典,内存安全的方法是一个弱引用支持的字典,但我遇到的问题是 GC 实在是太快了。实际上,这可能不是问题,因为对象的流量应该使它们能够保持活力而不会被迫重新生成太多,但理想情况下我希望它们也能按比例缩小。

有没有某种我没有想到的中间解决方案,可以让对象在一段时间内安全地从 GC 中隐藏起来,但也允许它们在这段时间结束时被收集,最好每次以类似于 session token 的方式使用时,该时间计数器在哪里重置?

最佳答案

我不确定为什么 HttpRuntime cache不会在这里工作。插入到缓存中的项目将在每次被触摸时“更新”,从而使它们保持事件状态,直到不再需要它们为止;之后它们将继续留在缓存中,直到它们过期(滑动或滚动时间)或由于内存压力而被迫退出。无论使用情况如何,它们也可以在明确设置的绝对时间强制退出:

  • 绝对时间:系统时钟超过某个DateTime后,元素被强制取出

  • 滑动(滚动)时间:每触摸一个元素,它的死亡倒计时就会重置。倒计时的时长为滑动时间(例如5分钟)。

示例用法:

//adds itemObject to cache under name "UniqueItemKey"
//set to expire 5 minutes after last touched
HttpRuntime.Cache.Add("UniqueItemKey",
itemObject,
null,
Cache.NoAbsoluteExpiration,
new TimeSpan(0, 5, 0),
CacheItemPriority.Normal,
null);

关于c# - 大对象缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/627267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com