在我的程序中,每次调用方法时,我都必须向ArrayList添加给定类的新实例。我的代码看起来像。
public class A
{
List<Object> myList = new List<Object>();
void resetMyList()
{
myList.Clear();
myList.Add(new B());
// Add more strings
// Call other methods
// ...
// Get a list of strings
}
}
public class B
{
public override string toString()
{
return "I'm B";
}
}
我的一位同事建议在A类中添加新属性,引用B类的一个实例。因此B类只会被创建一次而留在内存中。使用此解决方案,我们可以避免使垃圾收集器在创建和删除B的新实例时起作用。这是他的代码:
public class A
{
List<Object> myList = new List<Object>();
private B b = new B();
void resetMyList()
{
myList.Clear();
myList.Add(b);
// Add more strings
// Call other methods
// ...
// Get a list of strings
}
}
那么哪个建议更好,设计和性能明智?
编辑:我知道使用:
我只想保持示例简单,我关心的是设计和内存。是否添加私有成员并将其保留在内存中或每次创建新实例并避免额外成员。 我会以任何方式更改代码以使用List
答案 0 :(得分:3)
嗯,首先 - 这些代码不等效 - 在第一个代码中,每次清除B
时都会创建ArrayList
的新实例,第二个你一直使用B
的同一个实例。这意味着对此实例所做的任何更改(假设B
不是不可变的)将被取消&#34;每次在第一个代码中清除ArrayList
,但在第二个代码中保留{。}}。
关于哪一个更好&#34;表现明智&#34; - 它通常取决于很多因素,几乎总是不可能完全放心地回答。事实上,很难正确地回答这个问题Eric Lippert写了一篇关于它的整个blog post - 如果像他这样的人很难回答 - 那就是&#39 ;对任何人都很难(除非你的名字是Jon Skeet: - ))