ORM框架之Dapper简介和性能测试

作者:QFN-齐 时间:2024-05-03 15:30:44 

Dapper的简介

Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。 使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。这些ORM都可以轻松给你搞定。ORM给我们开发带来便利时,性能也是一个让我们不得不考虑的问题。一般的ORM性能和直接写原生的sql比都差不少,但是Dapper性能还很错,甚至和DbHelperSQL方式性能高出很多。

Dapper的优势

  1. Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后体积小。

  2. Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。

  3. Dapper支持多数据库。诸如:Mysql,SqlLite,Mssql系列,Oracle等一系列的数据库。

  4. Dapper的R支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用,无XML无属性,代码以前怎么写现在还怎么写。

  5. Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能高。

  6. Dapper支持net2.0及以上版本

  7. Dapper语法十分简单,并且无须迁就数据库的设计。

Dapper的性能

Dapper 的主要特点是性能。以下数据显示对一个数据库执行 SELECT 出 500 条,并把数据映射到对象中需要多长时间。

性能测试分为三个方面:

  1. POCO 序列化框架,支持从数据库获得静态类型的对象。使用原始的 SQL。

  2. 动态序列化框架,支持返回对象的动态列表。

  3. 典型的框架用法。往往不会涉及编写 SQL。

1. Performance of SELECT mapping over 500 iterations - POCO 序列化

方法持续时间(毫秒)备注
Hand coded (using a SqlDataReader)47Can be faster
Dapper ExecuteMapperQuery49同上
ServiceStack.OrmLite (QueryById)50同上
PetaPoco52同上
BLToolkit80同上
SubSonic CodingHorror107同上
NHibernate SQL104同上
Linq 2 SQL ExecuteQuery181同上
Entity framework ExecuteStoreQuery631同上

2. Performance of SELECT mapping over 500 iterations - dynamic 序列化

方法持续时间(毫秒)备注
Dapper ExecuteMapperQuery (dynamic)48 
Massive52 
Simple.Data95 

3. Performance of SELECT mapping over 500 iterations - 典型用法

方法 持续时间(毫秒)备注
Linq 2 SQL CompiledQuery81Not super typical involves complex code
NHibernate HQL118 
Linq 2 SQL559 
Entity framework859 
SubSonic ActiveRecord.SingleOrDefault3619 

其他见解:

  1. 能很方便地执行数据库 DML 和 DLL 操作。比如,当你执行一个带参数的 SQL 时,SQL 中的变量能与你传递给它的实体或匿名对象中的属性,自定匹配。而我们知道,带参数的 SQL,能提高数据库执行 SQL 的效率。

  2. 能很方便地将数据库检索结果映射为面向对象的对象。从数据库中的检索结果,通常是张二维表,如 DataTable,而应用程序中是实体类,以及实体类的集合,那么 Dapper 能够将 DataTable 自动地映射成为实体类的集合。

  3. 能很方便地书写 SQL 语句。比如,写多个 SQL,用分号分隔。

来源:https://blog.csdn.net/u014518337/article/details/90054850

标签:Dapper,简介,性能,测试
0
投稿

猜你喜欢

  • Python Django项目和应用的创建详解

    2023-12-26 15:03:52
  • js与jquery获取父级元素,子级元素,兄弟元素的实现方法

    2024-05-11 09:43:01
  • mysql如何查询日期与时间

    2024-01-26 02:03:17
  • 如何通过IntersectionObserver实现懒加载

    2024-04-16 08:44:41
  • PHP中合并数组的常见方法分享

    2023-05-25 12:02:48
  • Python编程中对文件和存储器的读写示例

    2022-04-27 06:26:35
  • python3中apply函数和lambda函数的使用详解

    2022-03-12 00:08:22
  • 安装sql server 2008 management提示已安装 SQL Server 2005 Express的解决方法

    2024-01-15 12:49:03
  • sql server中错误日志errorlog的深入讲解

    2024-01-23 11:57:58
  • 轻松掌握MySQL数据库锁机制的相关原理

    2008-12-17 15:23:00
  • Go语言omitempty选项的实现

    2024-04-25 15:12:40
  • mssql使用存储过程破解sa密码

    2024-01-20 10:28:09
  • Python 数据分析教程探索性数据分析

    2022-06-25 17:38:38
  • XMLHTTP中setRequestHeader的参数问题

    2008-09-30 10:48:00
  • 利用arcgis的python读取要素的X,Y方法

    2023-03-13 11:27:05
  • pytorch collate_fn的基础与应用教程

    2021-06-03 02:55:57
  • python怎么删除缓存文件

    2022-01-02 03:49:01
  • Python切片工具pillow用法示例

    2021-12-08 21:17:26
  • 基于tensorflow指定GPU运行及GPU资源分配的几种方式小结

    2021-10-03 10:22:27
  • asp显示数据库中表名、字段名、字段内容

    2008-06-17 18:09:00
  • asp之家 网络编程 m.aspxhome.com