繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 访问Typed DataSet的性能比untyped Dataset高?

访问Typed DataSet的性能比untyped Dataset高?

2007-09-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:在网上看到了不少这样评论,访问Typed DataSet数据的性能比untyped Dataset高。我一直表示怀疑,毕竟两者都是基于DataSet的实现;前者是代码编写时确定结构后者在运行期确定。按道理两者实例化后操作的效率是一致...

在网上看到了不少这样评论,访问Typed DataSet数据的性能比untyped Dataset高。我一直表示怀疑,毕竟两者都是基于DataSet的实现;前者是代码编写时确定结构后者在运行期确定。按道理两者实例化后操作的效率是一致。

但从http://rottenapple.cnblogs.com/上的测试结果看到,就算用Index访问untyped Dataset 的DataRow字段值也比不上Typed DataSet快!难道还有什么比索引定位还快?于是我就看下Typed DataSet在访问成员值是如何定义的。

代码如下:

public int CategoryID

{

get {

return ((int)(this[this.tableCategories.CategoryIDColumn]));

}

set {

this[this.tableCategories.CategoryIDColumn] = value;

}

}

原来DataRow除了提供Key和Index来定位成员外还提供了DataColumn定位的方法。为什么通过DataColumn来定位比Index要快呢?为了找到这个原因只能用反编译工作看下DataRow的代码了。

反编译看到以下代码终于就明白了。

public object this[int columnIndex]

{

get

{

return [Table.Columns[columnIndex]];

}

set

{

[Table.Columns[columnIndex]] = value;

}

}

无论你是通过Key还是Index定位,最终都是通过DataColumn来定位最终访问者。实际上Typed DataSet还是untyped Dataset访问效率应该都是一样的,只是访问方式不同导致效率上有差别。

开发人员可以通过写Typed DataSet重新包装来规定数据的访问方式,对于untyped Dataset就没有这么方便的,因为是运行期确定为了方便使用和维护很多时候只能用Key来访问。Typed DataSet虽然提高了访问效率(个人认为只是很微小的提升),但同时带来的就是Typed DataSet的维护工作。

如果真的要求效率为什么不直接用DataReader呢?而我自己偏向采用的方法是DataReader->Entity,以上纯属个人见解。

-------------------------------------------------

其次,世界上没有事情是绝对的,就编程这方面,代码执行速度,执行效率和开发效率、可读性维护性方面,往往没有“绝对追求速度”或者说“绝对易开发性”。

是凡接触过ADO.Net的人都知道,DataReader比DataSet速度快,DataSet比DataReader开发容易,功能强。但是并不是说,因为大家都希望自己程序快一点,所以就都用DataReader,因为我们要做的是在两者之间取得平衡而不是走极端——真要走极端,不要用.Net了,直接用汇编,速度肯定最快!

责任编辑:admin
相关文章