下载此文档

高手谈ORM之硬伤.doc


文档分类:生活休闲 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
实用标准文案
高手谈 ORM 之硬伤
前言
我是 Oracle, SqlServer 认证得 DBA, 也曾在 Oracle, sqlserver 中写过 100,000 行以供了所有 SQL 语句的生成,代码人员远离了数据库概念。从一个概念需求 (例如一个 HQL) 映射为一个 SQL 语句,并不需要什么代价,连 1% 的性能损失都没有。真正的性能损失在映射过程中,更具体地讲,是在对象实例化的过程中。我曾经做过一个试验,以“计算第 N 个素数”这样的命题。我采用 Delphi 写 Native Win32 Console 程序,又采用 C# 写 CLR Console 程序。两者相比,令我大
失所望。
耗时
N 结果
Delphi C#
1000 7927 0ms 2ms
精彩文档
实用标准文案
10000 104743 16ms 17ms
100000 1299721 438ms 324ms
1548586 11437m
1000000 7823ms
7 s
该命题采用的算法是找出第 N 个素数以前的所有素数,开辟一
个内存区存贮这些素数。在 Delphi 中我用链表,在 C# 中我用 List<int> 。实际的结论是:当列表足够大时,链表的性能远不及 List<int> 。当然,如果每个链表节点只装一个元素,这种差异会更
明显。事实上,我测试过每个链表节点所装的元素个数做了一个阶梯试验,从 30 个、 254 个、 510 个、 1022 个到 2046 个,每个节点所装载的元素数越多,耗时越短,最终越来越接近 C# 的 List<int> 。
不知道各位是否已经明白了性能在哪儿损失了:内存分配。 Native
的内存分配与释放都是非常耗时的操作系统行为。但在托管环境下,内存的释放是 GC 干的事情,甚至不需要统计到耗时中,而内存的分配也是一件非常快捷的事情。当然,即使是快捷也还是需要耗时的。这让我联想到 DataSet 的性能。 DataSet 也是一种数据容器,但是却没有多少人抱怨 DataSet 的性能。如果你明白 DataSet 的机制,就会发现, DataStorage 巧妙地规避了内存分配和耗时的问题。而我们的 ORM 无法解决每个对象实例在构造时分配内存所耗时间。 我做了一个不精确的评估, 相比 DataSet ,对象集合的性能损失大约占 20% 左右。
精彩文档
实用标准文案
如果假定 ORM 并没有比传统的数据访问方式耗费额外的 IO 的
话,除此之外, ORM 再没有任何性能损失!
再回到前提条件: ORM 并没有比传统的数据访问方式耗费额外的 IO 。这个条件成立么?
“由于 ORM 的实体对象定义已经固定, 所以即使我不需要某些字段,也一样需要加载这些字段。 ”
OK ,有的同学已经看出来了。额外定义一个视图的实体对象即可。

高手谈ORM之硬伤 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人majx0413
  • 文件大小271 KB
  • 时间2022-04-27
最近更新