高级架构师教你如何用C 快速高效复制对象,这招绝了

本文探讨了C#中对象转换的多种方法,包括硬编码、反射、序列化反序列化、表达式树与泛型,最后发现表达式树结合泛型变量是最佳解决方案,速度远超传统方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天来给大家讲讲如何用C# 快速高效复制对象,干货多多,不要错过哦!

  废话不多说直接上干货。

  1、需求

  在代码中经常会遇到需要把对象A转换成对象B,二者属性一致(不一致可以增加映射规则)。

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  2、解决方案

  2.1、硬编码

  直接硬编码写死转换,速度肯定最快,但是完全没有通用性,只能处理单一情况。

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  调用一百万次耗时:26毫秒

  2.2、反射

  反射应该是很多人用过的方法,就是封装一个方法,反射获取属性值,然后设置给目标对象。

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  调用一百万次耗时:2464毫秒

  2.3、序列化反序列化

  序列化的方式有很多种,有二进制、xml、json等等,今天我们就用Newtonsoft的json进行测试,序列化后再反序列化,拍卖一百万次耗时:2984毫秒

  从这可以看出序列化和反射效率差别不大。

  2.4、表达式树缓存

  既然上面用了反射性能都不理想,反而是硬编码效率最高,那我们不如想想办法通过硬编码的方式来转换,但是这个硬编码是通过别的方式生成了,这就是表达式树。

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  调用一百万次耗时:564毫秒

  2.5、表达式树+泛型变量

  上面使用了静态字典来保存委托,100w次的调用大部分时间都用来字典查找和类型转换了,下面用泛型类静态变量的封闭特性进行优化:

  

高级架构师教你如何用C 快速高效复制对象,这招绝了!

  调用一百万次耗时:107毫秒

  2.5、automapper

  还有种方式是使用automapper工具,原理也是生成硬编码,只不过是通过emit完成的,调用一百万次是338毫秒

  4、总结

  从以上的测试和分析可以很容易得出,用表达式树+泛型是最优的解决方案,比传统的序列化反序列化和反射更加优秀,甚至还能超越一些成熟工具的性能。同时感慨一下,精益求精,进无止境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值