之前在做实体深拷贝时一直使用的AutoMapper,但是总是觉得其写法比繁琐,效率也不算很高,自己写了一个轻量级的实体拷贝库YeaJur.Mapper,和AutoMapper 测试对比如下

PK项

YeaJur.Mapper

AutoMapper

版本

1.0

5.2

大小

6KB

247KB

相同类型深拷贝——实例(json格式)

[

{

"Products": [

{

"Id": "7ef9516e-e019-4b54-9636-89fc56b2906f",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223405)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "00293c28-b29a-4e2c-b5a2-6411d8a67d9e",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "42f8157a-0f25-472b-9b15-15bc876abeff",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "24e5b9af-5108-462b-924f-b79bf9c1b160",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "70a3414b-2c76-4417-a47c-4b807301f0f5",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "1990168f-244d-42b8-8276-7ee08e0829a0",

"Name": "YeaJur.Mapper",

"Other": null

}

}

],

"SellerInfo": {

"Id": "31875b3f-970d-4383-9d2f-b769c3e7cc87",

"Name": "YeaJur.Mapper",

"Remark": "YeaJur.Mapper"

}

},

{

"Products": [

{

"Id": "cd78b31d-0e83-4586-a202-f45349eabe98",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "e4ade655-22e3-4850-96dc-02f7059479b8",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "20d2219b-d520-4c58-840e-c11b10e8878f",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "3817b018-369a-4413-b0df-cde5a877d0d7",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "b83d5db6-1216-4a56-a448-d5c478a30b32",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "321b2dad-7d66-42d0-b75d-c019cd297a1b",

"Name": "YeaJur.Mapper",

"Other": null

}

}

],

"SellerInfo": {

"Id": "c7e7f104-3484-4640-9003-ad6ddd5cb3dc",

"Name": "YeaJur.Mapper",

"Remark": "YeaJur.Mapper"

}

},

{

"Products": [

{

"Id": "1d8c2158-008c-4ad1-8803-915a5e32c695",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "58c89199-c1fc-4c94-8d74-3ee3db5f074b",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "311ca89e-be6c-4bcf-8730-12abb1388319",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "87f3c2ce-d6bd-4cfb-bcf0-9a48615b223c",

"Name": "YeaJur.Mapper",

"Other": null

}

},

{

"Id": "5d23505c-206a-4bdc-9086-92532fcf37d7",

"Name": "YeaJur.Mapper",

"Count": 32,

"CreateTime": "/Date(1484796223406)/",

"Price": 12.32,

"SupplierInfo": {

"Id": "e5582774-ca39-43e0-8e78-9511ea96061b",

"Name": "YeaJur.Mapper",

"Other": null

}

}

],

"SellerInfo": {

"Id": "9f1b4e00-bf00-4946-8e8a-a2780c118079",

"Name": "YeaJur.Mapper",

"Remark": "YeaJur.Mapper"

}

}

]

相同类型深拷贝——写法

var model = list.Map();

AutoMapper.Mapper.Initialize(cfg =>

{

cfg.CreateMap<List<Order>, List<Order>>();

});

var model = AutoMapper.Mapper.Map<List<Order>>(list);

相同类型深拷贝——运行结果样例

相同类型深拷贝——运行平均速度

12.2ms(包括创建实体时间)

160.2ms(包括创建实体时间)

不同类型深拷贝——实例(json格式)

{

"Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

"Name": "YeaJur.Mapper",

"Remark": "YeaJur.Mapper.Seller"

}

{

"Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

"Name": "YeaJur.Mapper",

"Other": null

}

不同类型深拷贝——写法

Supplier model2 = model.Map<Supplier>();

Supplier model2 = model.Map<Seller,Supplier>();

AutoMapper.Mapper.Initialize(cfg =>

{

cfg.CreateMap<Seller, Supplier>();

});

Supplier model2 = AutoMapper.Mapper.Map<Seller, Supplier>(model);

不同类型深拷贝——运行结果样例

不同类型深拷贝——运行平均速度

9.6ms(包括创建实体时间)

174.6ms(包括创建实体时间)

不同类型自定义字段深拷贝——实例(json格式)

{

"Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

"Name": "YeaJur.Mapper.Seller",

"Remark": "YeaJur.Mapper.Seller"

}

{

"Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

"Name": "YeaJur.Mapper",

"Other": null

}

不同类型自定义字段深拷贝——写法

var dic = new Dictionary<string, string>

{

{nameof(Seller.Remark), nameof(Supplier.Other)}

};

Supplier model2 = model.Map< Supplier>(dic);

Supplier model2 = model.Map<Seller, Supplier>(dic);

AutoMapper.Mapper.Initialize(cfg =>

{

cfg.CreateMap<Seller, Supplier>();

cfg.ReplaceMemberName(nameof(Seller.Remark), nameof(Supplier.Other));

});

Supplier model2 = AutoMapper.Mapper.Map<Seller, Supplier>(model);

不同类型自定义字段深拷贝——运行结果样例

不同类型自定义字段深拷贝——运行平均速度

10.2ms(包括创建实体时间)

176.4ms(包括创建实体时间)

在项目的nuget中搜索  Yeajur.Mapper 即可下载使用

https://www.nuget.org/packages/YeaJur.Mapper

比AutoMapper轻量快速简洁的实体映射库YeaJur.Mapper的更多相关文章

  1. vue 移动端轻量日期组件不依赖第三方库

    Vue版移动端日期选择组件 1.优点:不需要依赖其他第三方库,灵活可配置: 不需要依赖第三方组件的vue日期移动端组件  小轮子 轻量可复用:  https://github.com/BeckReed ...

  2. wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费(2)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Skippr – 轻量、快速的 jQuery 幻灯片插件

    Skippr 是一个超级简单的 jQuery 幻灯片插件.只是包括你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了.Skippr 能够自适应窗口 ...

  4. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  5. Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程

    大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. Kubernetes已经改变了 ...

  6. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.2 重要发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  7. Dapper.NET——轻量ORM

    Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...

  8. 轻量的web框架Bottle

    简洁的web框架Bottle 简介 Bottle是一个非常简洁,轻量web框架,与django形成鲜明的对比,它只由一个单文件组成,文件总共只有3700多行代码,依赖只有python标准库.但是麻雀虽 ...

  9. 轻量高效的开源JavaScript插件和库 【转】

    图片 布局 轮播图 弹出层 音频视频 编辑器 字符串 表单 存储 动画 时间 其它 加载器 构建工具 测试 包管理器 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果 ...

随机推荐

  1. js原型对象,每个new出来的新对象都有独立的原型对象__proto__

    刚才看一篇博文的时候, 动手测试了一下 JavaScript的原型链, 原型对象,发现每个构造器(赋给了某个 prototype ) new 出来的对象都有各自独立的原型对象 __proto__. p ...

  2. 采用多线程方式,解决由于查询等待造成winfrom假死问题

    1.这里是触发一个比较耗时的操作,比如一次大数据量的查询: Thread thread = new Thread(new ThreadStart(DoWord)); thread.Start(); 2 ...

  3. 支持持久化的内存数据库-----Redis

    一.Redis概述 1.1.什么是Redis Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合 ...

  4. iptabels 的一些配置

    iptables -L -n iptables -F   iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DR ...

  5. [iOS Animation]-CALayer 图像IO

    图像IO 潜伏期值得思考 - 凯文 帕萨特 在第13章“高效绘图”中,我们研究了和Core Graphics绘图相关的性能问题,以及如何修复.和绘图性能相关紧密相关的是图像性能.在这一章中,我们将研究 ...

  6. 做自己的串口调试工具-MFC

    之前一共说了几个软件库,串口通讯的,xml加载的,还有动态提示的,通过这三个库就可以实现一个自己的串口调试工具,成品如下 动态加载配置文件之后如下 软件可以在xml中配置发送的字符串,不算是大工程,但 ...

  7. Android 编译错误

    本人使用的是Android studio1.3版本,前几天调试通过的项目,现在编译出现了错误.错误信息如下 Project app: apk dependencies can only be jars ...

  8. MySQL的MyISAM和InnoDB

    1.概述 MySQL数据库其中一个特性是它的存储引擎是插件式的.用户可以根据应用需要选择存储引擎.Mysql默认支持多种存储引擎,以适用各种不同的应用需要. 默认情况下,创建表不指定表的存储引擎,则新 ...

  9. $_SERVER参数的含义

    $_SERVER是由服务器创建的,包含了头信息.参数.路径等信息,以下是一些键代表的含义: $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关.$ ...

  10. java中基本类型占用字节数

    之前一直使用c/c++开发c中各种类型占用的位数和java还是有区别的,特地找了篇文章过来对比下. 在处理网络协议的时候需要注意 在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种 ...