【发布时间】:2010-10-25 12:59:42
【问题描述】:
我过去为一个项目创建了一个框架,它的功能之一是将数据库信息加载到我的业务实体类中(只有属性没有方法),然后从业务实体类加载到数据库中的参数集合要执行的存储过程。为此,我在该项目中使用 DB 归档信息和 SP 参数装饰了业务实体类,如下面的示例所示,并让框架使用反射加载实体或参数集合,因此我不必为维护生成新代码。
但是现在我正在创建一个新的更大的项目,当然要维护更多的代码,但是性能至关重要,我想知道是否值得对所有负载使用反射并保持代码更简单或实际生成所有代码和维护所有更改?
我进行了一些搜索,阅读了 MSDN 上的一些文档,但仍然发现了很多不同的意见,喜欢反射的人显示开销并没有那么糟糕,而其他人则说实际上最好远离反射
新应用的技术规格:
语言:C#
.Net 版本:3.5
应用程序类型:使用 C# 访问逻辑组件和数据访问层的经典 Web 窗体
数据库:SQL Server 2008
数据库抽象层:对数据库的所有访问都是通过存储过程和用户定义函数进行的。
示例代码:
// Decorated class
[System.Serializable()]
public class bMyBusinessEntity{
private Int64 _MyEntityID;
private string _MyEntityName;
private string _MyEntityDescription;
[aFieldDataSource(DataColumn = "MyEntityID")]
[aRequiredField(ErrorMessage = "The field My Entity ID is mandatory!")]
[aFieldSPParameter(ParameterName="MyEntityID")]
public Int64 MyEntityID{
get { return _MyEntityID; }
set { _MyEntityID = value; }
}
[aFieldDataSource(DataColumn = "MyEntityName")]
[aFieldSPParameter(ParameterName = "MyEntityName")]
public string MyEntityName{
get { return _MyEntityName; }
set { _MyEntityName = value; }
}
[aFieldDataSource(DataColumn = "MyEntityDescription")]
[aFieldSPParameter(ParameterName = "MyEntityDescription")]
public string MyEntityDescription{
get { return _MyEntityDescription; }
set { _MyEntityDescription = value; }
}
}
// To Load from DB to the Object:
using (DataTable dtblMyEntities = objDataSource.ExecuteProcedure(strSPName, objParams)) {
if (dtblMyEntities.Rows.Count > 0) {
DataRow drw = dtblMyEntities.Rows[0];
oFieldDataSource.LoadInfo(ref objMyEntity, drw);
return objMyEntity;
}
else
throw new Exception(“Row not found!”);
}
// To Load from the Object to the DB
oDataSource objDataSource = new oDataSource();
IDbDataParameter[] objParams = objDataSource.GetProcedureParameters(strSPName);
oFieldSPParameter.LoadInfo(objParams, objMyEntity);
objDataSource.ExecuteNonQuery(strSPName, objParams);
【问题讨论】:
标签: c# performance reflection .net-3.5