我的一个方法有问题需要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;
}