c# - 如何从 C# 中的 SQLDataReader 以更快的方式获取记录
问题描述
我们有一个存储过程,其结果数据如下。
testCol1 testCol2 testCol3 testCol4 testCol5
124 1234 4543 4532 5564
123 1235 4546 4537 5565
它有 190,000 条记录。
我正在尝试获取List<TestData>
类型中的数据,然后将其传递给第三方。下面是代码:
public class TestData
{
public int testCol1 { get; set; }
public int testCol2 { get; set; }
public string testCol3 { get; set; }
public double? testCol4 { get; set; }
public int testCol5 { get; set; }
}
var inputs = new List<TestData>();
using (SqlConnection con = new SqlConnection(fitchConnectionString))
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "dbo.ReadAll_ForTest";
cmd.CommandTimeout = 0;
con.Open();
using (SqlDataReader dr = new SqlDataReader(cmd.ExecuteReader()))
{
while (dr.Read())
{
inputs.Add(new TestData()
{
testCol1 = (int)dr["testCol1"];
testCol2 = (int)dr["testCol2"];
testCol3 =(string)dr["testCol3"];
testCol4 = (double)dr["testCol4"];
testCol5 = (int)dr["testCol5"];
});
}
}
}
//pass to third party
var output = thirdparty.Convert(inputs).ToArray();
它工作正常,但是需要花费大量时间来获取数据。有没有一种方法可以更快地获取数据?
解决方案
一种方法是显式指定类型,这样框架就不必弄清楚你的意思。提前获取序数(索引),并从列中提取确切的类型:
using (var dr = cmd.ExecuteReader())
{
var testCol1Idx = dr.GetOrdinal("testCol1");
var testCol2Idx = dr.GetOrdinal("testCol2");
var testCol3Idx = dr.GetOrdinal("testCol3");
var testCol4Idx = dr.GetOrdinal("testCol4");
var testCol5Idx = dr.GetOrdinal("testCol5");
while (dr.Read())
{
inputs.Add(new TestData()
{
testCol1 = dr.GetInt32(testCol1Idx);
testCol2 = dr.GetInt32(testCol2Idx);
testCol3 = dr.GetString(testCol3Idx);
testCol4 = dr.GetDouble(testCol4Idx);
testCol5 = dr.GetInt32(testCol5Idx);
});
}
}
除此之外,100K+ 是很多记录。你真的需要所有这些吗?尝试使用数据的子集,或在使用之前聚合数据。
推荐阅读
- r - 为什么 R 中有两个赋值运算符,`<-` 和 `->`?
- r - if() 中的 sparseIndexTracking 0.1.0 失败:需要 TRUE/FALSE 的缺失值
- asp.net-mvc - MVC Core 2.1:找到多个相同类型的自定义属性
- c++ - 在 imageStore() 之后为 3D 纹理生成 MipMap 级别
- django - Django 形成两个具有相同值的字段,一个是唯一的,具有默认值,另一个是隐藏字段
- mongodb - 无法启动 mongodb 服务器
- java - 当我们发送 BAD Request 状态作为输出时,Resful APi 输出正在从 JSON 更改为 XML
- php - 从 Joomla 中的静态方法设置和访问私有 var
- javascript - 将一个类导入反应
- jquery - 如何将数据从 Json 转换为 java