我目前填充业务对象的方式是使用类似于下面的代码片段。
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.CDRDatabase))
{
using (SqlCommand comm = new SqlCommand(SELECT, conn))
{
conn.Open();
using (SqlDataReader r = comm.ExecuteReader(CommandBehavior.CloseConnection))
{
while (r.Read())
{
Ailias ailias = PopulateFromReader(r);
tmpList.Add(ailias);
}
}
}
}
private static Ailias PopulateFromReader(IDataReader reader)
{
Ailias ailias = new Ailias();
if (!reader.IsDBNull(reader.GetOrdinal("AiliasId")))
{
ailias.AiliasId = reader.GetInt32(reader.GetOrdinal("AiliasId"));
}
if (!reader.IsDBNull(reader.GetOrdinal("TenantId")))
{
ailias.TenantId = reader.GetInt32(reader.GetOrdinal("TenantId"));
}
if (!reader.IsDBNull(reader.GetOrdinal("Name")))
{
ailias.Name = reader.GetString(reader.GetOrdinal("Name"));
}
if (!reader.IsDBNull(reader.GetOrdinal("Extention")))
{
ailias.Extention = reader.GetString(reader.GetOrdinal("Extention"));
}
return ailias;
}
有没有人对如何提高这样的性能有任何建议?请记住,对于某些类型,PopulateFromReader 包含更多的数据库查找,以便完全填充对象。
最佳答案
一个明显的变化是替换这种声明:
ailias.AiliasId = reader.GetInt32(reader.GetOrdinal("AiliasId"));
和
ailias.AiliasId = reader.GetInt32(constAiliasId);
其中 constAiliasId 是一个常量,包含 AiliasId 字段的序号。
这避免了循环的每次迭代中的序数查找。
关于c# - 提高 DAL 性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1187571/