C# 创建公共对象构造函数是否会影响性能? 背景
假设我有一个C# 创建公共对象构造函数是否会影响性能? 背景,c#,performance,C#,Performance,假设我有一个地址对象: public class Address_Model{ public int Id {get; set;} public string Street{get; set;} public string City {get; set;} public string State {get; set;} public string PostalCode{get; set;} } 此属性用于其他几个对象(即office对象、hom
地址
对象:
public class Address_Model{
public int Id {get; set;}
public string Street{get; set;}
public string City {get; set;}
public string State {get; set;}
public string PostalCode{get; set;}
}
此属性用于其他几个对象(即office
对象、home
对象等):
这些模型住在我的BLL里。在使用DAL数据的构造函数中,我当前手动构造Address
属性:
public Office_Model GetOffice(int id){
var office = DAL.SomeClass.GettOfficeById(id);
return new Office_Model
{
Id = office.Id,
Address = new Address_Model{
Id = office.Address.Id,
Street = office.Address.Street,
City = office.Address.City,
State = office.Address.State,
PostalCode = office.Address.PostalCode
}
}
}
public Home_Model GetHome(int id){
var home = DAL.SomeClass.GettHomeById(id);
return new Home_Model
{
Id = home.Id,
Address = new Address_Model{
Id = home.Address.Id,
Street = home.Address.Street,
City = home.Address.City,
State = home.Address.State,
PostalCode = home.Address.PostalCode
}
}
}
为了提高代码的可维护性(例如,不必在构建地址模型的所有地方添加新的属性,如Street2
),我想创建一种构建地址模型的常用方法:
public Address_Model GetAddressModel(DAL.SomeClass.Address address){
return new Address_Model{
Id = address.Address.Id,
Street = address.Address.Street,
City = address.Address.City,
State = address.Address.State,
PostalCode = address.Address.PostalCode
}
}
现在,我的BLL getter方法看起来更像这样:
public Office_Model GetOffice(int id){
var office = DAL.SomeClass.GettOfficeById(id);
return new Office_Model
{
Id = office.Id,
Address = GetAddressModel(office.Address);
}
}
public Home_Model GetHome(int id){
var home = DAL.SomeClass.GettHomeById(id);
return new Home_Model
{
Id = home.Id,
Address = GetAddressModel(home.Address);
}
}
问题:
授权该施工作业是否会对绩效产生负面影响?我是性能评测新手,刚刚学习了装箱
和拆箱
;我不确定这种性能下降是否适用于我在这里所做的工作
显然,我已经将这个例子简化到了很大程度。实际上,需要构造更多的嵌套对象。装箱
,来自:
装箱是将值类型转换为类型或对象的过程
此值类型实现的任何接口类型
由于
地址
对象是引用类型(标记为类
而不是结构
),并且您希望收到地址
类型作为参数,因此代码中不会出现装箱。更重要的是,JIT编译器可能会决定内联您的方法调用,这将完全消除为该调用创建新堆栈框架的情况。请阅读:在初始开发期间,您可以忽略几乎所有的性能考虑,然后在应用程序完全工作后解决您明确测量的任何此类问题。这里没有装箱的情况。不,这不会影响性能。一旦你有机会真正使用性能评测,你可能会发现一些有趣的东西;根据我的经验,瓶颈几乎从来没有达到我想象的程度。“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源”~~D.KnuthThanks解释说,Yuval。这是有道理的,当然。作为一个侧重点,我会考虑重构这些方法,这样就根本不用添加这个方法了。看看,也许会让你的生活更轻松。再次感谢。我会调查的。
public Office_Model GetOffice(int id){
var office = DAL.SomeClass.GettOfficeById(id);
return new Office_Model
{
Id = office.Id,
Address = GetAddressModel(office.Address);
}
}
public Home_Model GetHome(int id){
var home = DAL.SomeClass.GettHomeById(id);
return new Home_Model
{
Id = home.Id,
Address = GetAddressModel(home.Address);
}
}