1 前言
我喜歡造輪子,一是造的時(shí)候就是深刻學(xué)習(xí)的時(shí)候,二是造著造著,說(shuō)不定某天比世面上的其它輪子都要好呢。比如造過(guò)Networksocket,也造過(guò)
WebApiClient <https://github.com/dotnetcore/WebApiClient>
,現(xiàn)在我也要造一個(gè)Mapper,由于已經(jīng)有好多Mapper存在,所以這個(gè)項(xiàng)目只能叫偏門(mén)的QMapper
<https://github.com/xljiulang/QMapper>了。
2 QMapper的定位
2.1 約定限制
* 屬性名稱相同的才能映射
* 屬性名稱大小寫(xiě)不敏感
* 不支持嵌套屬性映射
2.2 功能要求
* 無(wú)預(yù)先配置,性能要好
* 支持映射時(shí)傳入要映射的屬性名
* 支持映射時(shí)傳入忽略映射的屬性名
* 封裝的調(diào)用Api使用簡(jiǎn)單
2.3 應(yīng)用場(chǎng)景
* PO、VO、DTO相互轉(zhuǎn)換
* PO、VO、DTO相互轉(zhuǎn)換時(shí)保護(hù)一些字段
* 根據(jù)前端提交的字段,動(dòng)態(tài)PO、VO、DTO相互轉(zhuǎn)換
2.4 使用例子
var a = new A(); var b = a.AsMap().To<B>(); var b =
a.AsMap("Name","Age").To<B>(); var b = a.AsMap().Ignore(item=>item.Id).To<B>();
3 Benchmark
BenchmarkDotNet=v0.11.5, OS=Windows 10.0.17134.885
(1803/April2018Update/Redstone4) Intel Core i3-4150 CPU 3.50GHz (Haswell), 1
CPU, 4 logical and 2 physical cores .NET Core SDK=3.0.100-preview6-012264
[Host] : .NET Core 3.0.0-preview6-27804-01 (CoreCLR 4.700.19.30373, CoreFX
4.700.19.30308), 64bit RyuJIT DefaultJob : .NET Core 3.0.0-preview6-27804-01
(CoreCLR 4.700.19.30373, CoreFX 4.700.19.30308), 64bit RyuJIT | Method | Mean |
Error | StdDev | Median | |--------------------------------
|---------------:|---------------:|--------------:|---------------:| | QMap |
201.0 ns | 4.368 ns | 11.74 ns | 198.2 ns | | EmitMap | 832.6 ns | 42.569 ns |
119.37 ns | 780.7 ns | | AutoMap_Singleton_Configuration | 428.1 ns | 12.006 ns
| 33.86 ns | 415.0 ns | | AutoMap_Transient_Configuration | 4,694,588.0 ns |
117,854.402 ns | 341,916.99 ns | 4,559,848.4 ns |
3.1 特殊性說(shuō)明
AutoMap_Singleton_Configuration和其它三個(gè)測(cè)試條件不一樣,為了能夠進(jìn)行測(cè)試,只能直接調(diào)用它配置好的IMapper實(shí)例,但在應(yīng)用環(huán)境中,我們必須從DI或緩存中根據(jù)類(lèi)型映射獲取類(lèi)型對(duì)應(yīng)的IMapper實(shí)例,一般的緩存查找將消耗3倍數(shù)的時(shí)間。
3.2 QMap為什么快
QMap存在必須的約定和限制,其在架構(gòu)設(shè)計(jì)時(shí)就可以拋棄緩存,使用泛型類(lèi)型的靜態(tài)方法或靜態(tài)屬性取代緩存功能,從而獲取到比使用緩存更高的性能。另外,QMap在屬性類(lèi)型轉(zhuǎn)換時(shí),構(gòu)造Expression時(shí)分析使用最優(yōu)的轉(zhuǎn)換方法,從而在運(yùn)行時(shí)的轉(zhuǎn)換邏輯包含最少的IL指令,同時(shí)將裝箱拆箱操作降低到最少。
4 github源代碼
https://github.com/xljiulang/QMapper <https://github.com/xljiulang/QMapper>
目前QMapper還是初期,功能少,代碼也少,閱讀容易。
熱門(mén)工具 換一換

感谢您访问我们的网站,您可能还对以下资源感兴趣:
调教肉文小说-国产成本人片免费av-空姐av种子无码-在线观看免费午夜视频-综合久久精品激情-国产成人丝袜视频在线观看软件-大芭区三区四区无码-啊啊好爽啊啊插啊用力啊啊-wanch视频网-国产精品成人a免费观看