我的一种方法有问题,需要 4-5 分钟来初始化约 17,000 个 poco 对象并用它们填充列表。我试图避免对查询中的数据进行分页,因此需要初始化 ~17,000。我们正在使用 Oracle DB 和 Microsoft.Practices.EnterpriseLibrary 来调用 DB。不确定该信息是否相关,但以防万一。我正在使用 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;
}
}
数据访问和初始化方法
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;
}