【发布时间】:2013-02-08 03:46:42
【问题描述】:
就对象大小而言,如果公开的属性不代表一个状态,而只是将其 getter 和 setter 调用委托给另一个实体,那么属性如何代替 Get/Set 方法影响对象大小?
例如,考虑以下类:
public class Person
{
Address _address = new Address();
public string AddressName
{
get{ return _address.Name; }
set { _address.Name = value; }
}
public string GetAddressName(){ return _address.Name; }
public void SetAddressName(string name){ _address.Name = name; }
}
public Address
{
public string Name { get; set; }
}
我猜测当创建一个新的 Person 时,CLR 在确定分配多少内存时会考虑 AddressName 属性的潜在大小。但是,如果我公开的只是 Get/Set AddressName 方法,则不会分配额外的内存来满足 AddressName 属性。因此,为了节省内存占用,在这种情况下最好使用 Get/Set 方法。但是,这不会对 Address 类的 Name 属性产生影响,因为正在保留状态。这个假设正确吗?
【问题讨论】:
-
when a new Person is created, the CLR will take into consideration the potential size of AddressName不会,它会分配足够的空间来存储对字符串的引用。 -
这是出于好奇吗?如果这是可行的,我不会担心生成的 IL 大小的几个差异(如果有任何差异的话)。
-
@IlyaIvanov,这很奇怪,但我也在努力考虑这个项目的性能。
-
同意,我错了。我查看了属性
public string AddressName并自动想到string是一种支持字段。感谢指正 -
请参阅 Jeffrey Richter 所著的优秀书籍 CLR Via C# 了解全部详情。每个 C# 程序员都应该阅读它。 :)
标签: c# memory-management clr