如何减少在不同区域托管的SQL数据库中读取40000条记录所花费的时间



我有一个SP,它可以获取多个结果集。在对结果集进行迭代时,其中一个结果会在结果集中提供40000条记录。在将结果集转换为List的过程中,处理列表需要几分钟时间,这是不可取的。

有没有办法改进我们更快、更快地读取数据的方式?

var testEquipments = dataReader.GetList<TestEquipmentData>().ToList();
public static IEnumerable<T> GetList<T>(this DbDataReader reader) where T : new()
{
var properties = typeof(T).GetProperties();
var modelProperties = new List<string>();
var columnList = reader.GetSchemaTable().Select().Select(r => r.ItemArray[0].ToString());
while (reader.Read())
{
var element = Activator.CreateInstance<T>();
IDictionary<string, string> databaseMappings = DBColumn<T>();
string columnName;
foreach (var f in properties)
{
if (!columnList.Contains(f.Name) && !databaseMappings.ContainsKey(f.Name))
{
continue;
}

columnName = databaseMappings.ContainsKey(f.Name) ? databaseMappings[f.Name] : f.Name;
var o = (object)reader[columnName];
if (o.GetType() != typeof(DBNull))
{
f.SetValue(element, ChangeType(o, f.PropertyType), null);
}
}
yield return element;
}
}
  1. 对columnList求值一次,而不是对每行重新求值
  2. 不要为每一行创建数据库映射
  3. 不要使用反射
  4. 不要使用linq

前两个是最重要的。3.和4。只要你只做一次,不在循环中,就可以。

提示:也许可以看看dapper或类似的东西。

还有。。。不要选择((两次以获取columnList?

最新更新