我目前填充业务对象的方式是使用类似于下面的代码片段。

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/

10-10 12:35