gpt4 book ai didi

c# - 字典如何在 GC 之后找到对象?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:23 25 4
gpt4 key购买 nike

查看这篇文章:references updated on GC ,似乎堆可以在垃圾收集上压缩,这意味着引用会发生变化。

现在,如果我将一个对象作为键放入字典(假设该对象未实现 GetHashCode/Equals),那么该引用将用于确定它在其内部哈希表中的位置。随后在 GC 上,如果引用发生变化,我想查找对象,C# 将如何找到它?

最佳答案

字典不使用对象在内存中的位置来记账——它使用哈希码。当对象在内存中移动时,对象的哈希码不会改变,即使它没有覆盖 GetHashCode()。关于它如何工作的细节是非常多的实现细节,但你绝对可以依赖 GetHashCode() 在压缩前后返回相同的值(假设该方法没有在一些奇怪和可怕的情况下被覆盖方式)。

虽然实现细节会随着时间而改变,this blog post有一个有趣的(和最近的)描述。我相信这在 .NET Core 中仍然有效(截至 2018 年 4 月),基于 .NET Core CLR GitHub 存储库中的追踪代码 - this据我所知,这是一个合理的起点。

关于c# - 字典如何在 GC 之后找到对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49953112/

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