Asp.net 创建对象的成本是多少

Asp.net 创建对象的成本是多少,asp.net,performance,architecture,Asp.net,Performance,Architecture,如果我必须在静态方法和创建实例以及使用实例方法之间进行选择,我将始终选择静态方法。但是创建实例的详细开销是什么 例如,我看到了一个DAL,它可以用静态类来完成,但是他们选择现在在BLL中的每一个调用中都使用它作为实例 新客户().GetData() 这有多糟糕 谢谢通常情况下,人们不应该太担心CLR中的对象创建开销。为新对象分配内存将非常快(由于垃圾收集器-GC的内存压缩阶段)。创建新对象将占用对象的一点内存,并对GC施加更大的压力(因为它将不得不清理对象),但如果只使用了很短的时间,那么它可能

如果我必须在静态方法和创建实例以及使用实例方法之间进行选择,我将始终选择静态方法。但是创建实例的详细开销是什么

例如,我看到了一个DAL,它可以用静态类来完成,但是他们选择现在在BLL中的每一个调用中都使用它作为实例

新客户().GetData()

这有多糟糕


谢谢

通常情况下,人们不应该太担心CLR中的对象创建开销。为新对象分配内存将非常快(由于垃圾收集器-GC的内存压缩阶段)。创建新对象将占用对象的一点内存,并对GC施加更大的压力(因为它将不得不清理对象),但如果只使用了很短的时间,那么它可能会在早期GC生成中收集,这在性能上并不是很差。此外,性能开销与对数据库的调用相比也会相形见绌

一般来说,我将根据我对对象的要求(例如需要模拟/存根以进行测试),而不是性能上的细微差异,决定是为一些相关方法创建一个新对象,还是仅仅利用一个静态类(和方法)


作为旁注-是否
newcustomer().GetData()
是否是放置此类代码的正确位置值得怀疑-对我来说,返回的数据似乎与基于该语句的客户实例直接相关,而不是实际调用数据库来检索数据。

性能损失应该可以忽略不计。有人做了一个简短的基准测试,结果是创建500000个对象并将它们添加到列表中大约需要1.5秒

所以,既然我猜
newcustomer().GetData()
在单个BLL函数中最多调用几百次,性能损失可以忽略

作为旁注,如果
newcustomer().GetData():如果class
Customer
只是提供了获取数据的方法,那么应该将其称为不同的名称,例如
CustomerReader
(因为没有更好的名称)。另一方面,如果
Customer
有一个实际代表客户的实例状态,
GetData
应该是静态的——不是出于性能的原因,而是出于一致性的原因