.NET垃圾收集器许多静态变量

本文关键字:静态 变量 许多 收集器 NET | 更新日期: 2023-09-27 18:22:07

在最近的一个项目中,我发现了许多由静态类持有的公共静态变量。其中一些是字符串,但另一些是名为"Member"的类的实例。总共,我有大约17151个这样的静态实例。

问题:1) 哪些静态实例被视为GC根?全部或仅成员实例?。我猜字符串将被忽略为超过GC根,因为字符串是一个不可变的类型,并且不包含对其他类型的引用。

2) 你有什么建议?要使"Member"类成为一个结构(它非常轻,只有3-4个int或bool类型的字段),或者创建Member的惰性实例?(声明仅在需要时生成Member实例的静态属性)或其他建议。。。我会考虑的任何想法

由于我将成员设置为beying不可变,并且成员不持有其他对象的实例,是否有可能指示GC停止将这些实例视为beyind GC根?

谢谢!

.NET垃圾收集器许多静态变量

哪些静态实例被视为GC根?全部或仅成员实例?。

所有静态成员都被视为GC根。

我想字符串将被忽略为超过GC根,因为字符串是一个不可变的类型,不包含对其他类型的引用类型。

这是不正确的。在一个类型上声明的静态字符串将与不同类型的下一个静态成员一样是根。

你有什么建议?

我的建议是,首先看看所有这些情况是否真的会给你带来记忆压力。如果是,那么我会重新思考,为什么你首先需要所有这些静态实例?他们都需要在这个过程中度过一生吗?它们可以缓存吗?他们真的应该是静态成员吗?为了提高自己,你可以问自己很多问题。