Nic*_*uso 4 .net c# performance dataset strongly-typed-dataset
在我工作的地方,我们终于开始使用强类型数据集将一些查询封装到sqlserver.我一直在吹嘘的一个想法是强类型列的强度,主要是因为不需要转换任何数据.我认为强类型数据集会在以下可能存在数千行的情况下提高性能,这是错误的吗?
旧方式:
using(DataTable dt = sql.ExecuteSomeQuery())
{
foreach (DataRow dr in dt.Rows)
{
var something = (string)dr["something"];
var somethingelse = (int)dr["somethingelse"];
}
}
Run Code Online (Sandbox Code Playgroud)
新方法:
MyDataAdapter.Fill(MyDataset);
foreach (DataRow dr in MyDataset.MyDT.Rows)
{
var something = dr.Something;
var somethingelse = dr.SomethingElse;
}
Run Code Online (Sandbox Code Playgroud)
如果属性真的只是在幕后进行投射,我可以看到根本不会有任何加速; 或许它需要更长的时间才能获得函数调用的开销.
使用我们应该了解的DataSet还有其他任何性能优势/劣势吗?
谢谢!
如果查看为类型化数据集生成的代码,可以看到每个类型化调用下的是使用字符串索引名称进行的调用.因此,他们确实没有提供性能提升,只提供类型安全性.
但是,我对键入的数据集中的可空字段抱有很大的抱怨.具体来说,如果您访问一个为null的int字段,则会抛出异常..您必须首先调用IsMyfieldNull()调用以确定它是否为null,并且如果是,则避免引用它.一个真正的解决方案是允许可空类型字段,因此您不会冒险只为触摸字段而抛出异常的风险.我心中的这个缺陷几乎否定了强力打字的好处.