需要有关优化项目列表初始化的建议

时间:2013-09-20 18:35:04

标签: c# oracle poco idatareader

我的一个方法有问题需要4-5分钟来初始化~17,000个poco对象并用它们填充列表。我正试图摆脱查询中的数据分页,因此需要初始化~17,000。我们使用Oracle DB和Microsoft.Practices.EnterpriseLibrary来调用数据库。不确定该信息是否相关,但以防万一。我正在使用ExecuteReader方法的reader对象来设置Poco类的60个属性。我不确定为什么这么长时间。查询大约需要3-5秒才能执行。因此,我将非常感谢任何有关如何更改代码以加快速度的建议。另外,有人告诉我,查询是在reader.Read()调用而不是ExecuteReader()调用上执行的。我不认为这是正确的,但如果有人知道它是否可以让你知道?再次感谢。

POCO课程

public class BaseWorkItem : ITransactionWorkItem  
{  
    public int Prop1 { get; set; }  
    public string Prop2 { get; set; }
    ....  

    public ITransactionWorkItem SetValues(IDataReader reader)
    {
        Prop1 = reader["Prop1"] != DBNull.Value ?
            Convert.ToInt32(reader["Prop1"]) : -1;
        Prop2 = reader["Prop2"] != DBNull.Value ?
            reader["Prop2"].ToString() : "";  
        ....  
        return this;
    }
}

DataAccess&初始化方法

static IEnumerable<ITransactionWorkItem> GetQueue_WorkItems<T>(IDataReader reader)
    where T : ITransactionWorkItem, new()
{
    if (reader.IsNotNull())
    {
        while (reader.Read())
        {
            yield return (T)(new T().SetValues(reader));
        }
    }
}

public static List<ITransactionWorkItem> GetItems(int param1, int param2,
    int param3, int param4)
{
    Database oracle = null;
    IDataReader reader = null;
    var items = new List<ITransactionWorkItem>();

    oracle = Oracle.GetDatabase();

    using (reader = oracle.ExecuteReader("SomeProcedureName", param1, param2,
        param3, param4, null))
    {
        items.AddRange(GetQueue_WorkItems<BaseWorkItem>(reader));
    }

    return items;
}

0 个答案:

没有答案