我需要维护一个类的大约20000个对象的列表。这个类将是c ++的托管包装器。我想知道是否可以使用ref类或值类。
我被告知以下是因为GC的优点/缺点
对于值类,使用指针有一个垃圾收集对引用类的点,其中将有20000个垃圾收集对象。此外,没有值类的终结器或析构函数,因此这些对象不会在单线程的终结队列中结束。
在这两种情况下,有人可以为大型对象列表详细说明GC的功能。
答案 0 :(得分:2)
答案 1 :(得分:0)
使用引用类型绝对最简单 - “不要让我思考”这种平衡真的是这样提示
FWIW,我完全可以看到自己分配一个大约2Mb的缓冲区来包含一个valuetype对象数组。
问题是,这些必须转移多少次。如果它仅用于查找表,那么值对象数组将获得一些性能,并可能带来其他好处[1]。这在'FlyWeight'种模式中很有用
只需注意只将索引传递给周围的对象,否则复制很快就会使你的应用程序生活变得悲惨
[1]例如快速序列化;数组索引在app开发人员的控制之下,与参考值的标识形成对比。这可以通过索引值对这些查找项进行非常有效的“浅层”序列化,这在编组类型的用例中很有用(而不是实际编组完整的引用对象,你可以参考它通过使用您为此目的设计的“无处不在的常数ID”。