当前位置:  开发笔记 > 编程语言 > 正文

强类型数据集是否可以提高性能?

如何解决《强类型数据集是否可以提高性能?》经验,为你挑选了2个好方法。

在我工作的地方,我们终于开始使用强类型数据集将一些查询封装到sqlserver.我一直在吹嘘的一个想法是强类型列的强度,主要是因为不需要转换任何数据.我认为强类型数据集会在以下可能存在数千行的情况下提高性能,这是错误的吗?

旧方式:

using(DataTable dt = sql.ExecuteSomeQuery())
{
    foreach (DataRow dr in dt.Rows)
    {
        var something = (string)dr["something"];
        var somethingelse = (int)dr["somethingelse"];
    }
}

新方法:

MyDataAdapter.Fill(MyDataset);
foreach (DataRow dr in MyDataset.MyDT.Rows)
{
    var something = dr.Something;
    var somethingelse = dr.SomethingElse;
}

如果属性真的只是在幕后进行投射,我可以看到根本不会有任何加速; 或许它需要更长的时间才能获得函数调用的开销.

使用我们应该了解的DataSet还有其他任何性能优势/劣势吗?

谢谢!



1> Patrick McDo..:

我不确定使用强类型数据集是否会有任何性能改进,但是您可以获得添加的类型安全性,例如,当您输入字段名称时,编译器会出现错误.

在MSDN杂志中有一篇关于它们的文章,引用其中的一行:

访问类型化DataSet的速度与访问非类型化DataSet的速度更快(因为类型化DataSet只是非类型化DataSet上的层)并且类型化DataSet的可读性最佳

此外,正如斯图尔特B所指出的,仅凭智能感知就值得.



2> Brady Moritz..:

如果查看为类型化数据集生成的代码,可以看到每个类型化调用下的是使用字符串索引名称进行的调用.因此,他们确实没有提供性能提升,只提供类型安全性.

但是,我对键入的数据集中的可空字段抱有很大的抱怨.具体来说,如果您访问一个为null的int字段,则会抛出异常..您必须首先调用IsMyfieldNull()调用以确定它是否为null,并且如果是,则避免引用它.一个真正的解决方案是允许可空类型字段,因此您不会冒险只为触摸字段而抛出异常的风险.我心中的这个缺陷几乎否定了强力打字的好处.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有