如果我使用对象的属性作为内存缓存中的键,该对象是不是仍会被垃圾回收?

Posted

技术标签:

【中文标题】如果我使用对象的属性作为内存缓存中的键,该对象是不是仍会被垃圾回收?【英文标题】:If I use the property of an object as the key in Memory Cache, will that object still be garbage collected?如果我使用对象的属性作为内存缓存中的键,该对象是否仍会被垃圾回收? 【发布时间】:2021-08-25 22:54:40 【问题描述】:

假设您有一个像 User 这样的对象,其中一个属性是 UserName。假设您想使用 C# MemoryCache 来存储有关该用户的一些信息,并使用 UserName 字符串属性作为缓存中的键。

这会阻止用户对象的垃圾收集吗?

【问题讨论】:

我们需要minimal reproducible example。简短的回答 - 如果UserMemoryCache 中的键或值,它将阻止垃圾收集。如果没有,它不会。 【参考方案1】:

如果我理解正确,您保存的是属性值(在这种情况下为字符串)而不是对象本身,因此您的对象将被垃圾回收。

【讨论】:

In this case it should be copied by value and not by reference 这个陈述要么是错误的,要么是多余的。最好删除它。

以上是关于如果我使用对象的属性作为内存缓存中的键,该对象是不是仍会被垃圾回收?的主要内容,如果未能解决你的问题,请参考以下文章

通过 JavaScript 中的键访问对象属性

标准化 javascript 对象数组中的键

检查Javascript中对象数组中的键是不是?

内存键值缓存是不是包含引用值?

C++ 线程安全对象缓存的设计选项

使用字典中的键对对象数组进行排序