gpt4 book ai didi

c# - (Xamarin、Android)此代码如何帮助减少引用实例?

转载 作者:行者123 更新时间:2023-11-30 20:34:46 26 4
gpt4 key购买 nike

我正在阅读 Android 的垃圾收集文档,网址为 Garbage Collection -- Reduce Referenced Instances ,我不太明白这段代码的机制

class HiddenReference<T> {

static Dictionary<int, T> table = new Dictionary<int, T> ();
static int idgen = 0;

int id;

public HiddenReference ()
{
lock (table) {
id = idgen ++;
}
}

~HiddenReference ()
{
lock (table) {
table.Remove (id);
}
}

public T Value {
get { lock (table) { return table [id]; } }
set { lock (table) { table [id] = value; } }
}
}

class BetterActivity : Activity {

HiddenReference<List<string>> strings = new HiddenReference<List<string>>();

protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);

strings.Value = new List<string> (
Enumerable.Range (0, 10000)
.Select(v => new string ('x', v % 1000)));
}
}

HiddenReference 是如何工作的?如果 GC 将递归扫描 BetterActivity 引用的实例,难道它不能看到 strings 字段中的列表,然后是列表中的所有字符串吗?我想我错过了什么。感谢您的帮助。

谢谢!

最佳答案

想法是HiddenReference有一个 static Dictionary<T> .每个静态对象都被垃圾收集器视为根对象。这意味着我们有一个托管的、 Root过的对象。在这种情况下,GC 桥不需要检查潜在的引用,因为它可以确保永远不会收集该对象。

一个注意事项:减少 Activity 中的引用如果您在 GC 过程中发现速度变慢,则应该这样做。如果您的应用运行良好,则无需优化。

关于c# - (Xamarin、Android)此代码如何帮助减少引用实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747139/

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