内容简介:在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了问题是在昨天发现的,使用如果改为获取10条记录,耗时需要
在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了 AutoMapper ProjectTo<T>
与 Mapster ProjectToType<T>
的千倍性能之差。
问题是在昨天发现的,使用 AutoMapper ProjectTo<T> + EF Core
从数据库中获取20条记录竟然耗时 10s
左右。
[Information] Executed DbCommand ("9,947"ms) [Parameters=["@__p_3='20'"], CommandType='Text', CommandTimeout='30']"
如果改为获取10条记录,耗时需要 5s
左右,从中可以推测某个原因造成获取单条记录增加了额外的开销。
而用同样的 SQL 语句在 SSMS 中查询数据库飞快,可以排除不是数据库层面的问题。
根据前车之鉴,将异步的 ToListAsync()
改为同步的 ToList()
,但问题依旧。
对于这个奇怪的问题,从 EF Core 层面实在找不到线索,于是将怀疑的目光转向了 AutoMapper
。
代码中用到了 AutoMapper 的 ProjectTo
:
return await _postQueryRepository .GetPostsByStartId(startId) .OrderBy(p => p.Id) .Take(itemCount) .ProjectTo<T>() .ToListAsync();
在配置映射时使用了字符串连接:
conf.CreateMap<BlogPost, BlogPostDto>() .ForMember(dto => dto.AuthorUrl, opt => opt.MapFrom(p => "https://www.cnblogs.com/" + p.BlogSite.Application + "/"));
去掉上面的映射配置之后,速度立马变得飞快,而 Executed DbCommand
执行时间从 9,947ms
飞流直下 2ms
,原来是 AutoMapper 惹的祸!
[Information] Executed DbCommand ("2"ms) [Parameters=["@__p_3='20'"], CommandType='Text', CommandTimeout='30']"
而同样的代码在 .NET Framework 中没这个问题,看来是 AutoMapper
与 EF Core
相处不融洽。
原因已经找到,那如何解决或避开这个问题呢?这时想到了刚认识不久了解不多的新朋友 —— Mapster
,换上对象映射界的新秀 Mapster
试试。
将 ProjectTo
改为 ProjectToType
,并如下配置映射关系:
TypeAdapterConfig<BlogPost, BlogPostDto>.ForType() .Map(dest => dest.AuthorUrl, src => "https://www.cnblogs.com/" + src.BlogSite.Application + "/");
运行后惊喜地发现 Mapster
没这个问题,多次运行 Executed DbCommand
都在 10ms
以内,千倍之差,让人眼前一亮的新秀。
[Information] Executed DbCommand ("2"ms) [Parameters=["@__p_3='20'"], CommandType='Text', CommandTimeout='30']"
在这冬去春来之际,由于遇到这个问题,也到了我们辞去 AutoMapper
迎来 Mapster
的时候。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 爬虫性能相关
- mysql翻页性能相关原理
- Java性能调优相关命令摘要
- SpringBoot | 第十三章:测试相关(单元测试、性能测试)
- WebAssembly 相关工具
- Python 集合相关操作
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning XSLT 2.0
Jeni Tennison / Apress / 2005-07-22 / USD 49.99
This is an updated revision of Tennison's "Beginning XSLT", updated for the new revision of the XSLT standard. XSLT is a technology used to transform an XML document with one structure into another ......一起来看看 《Beginning XSLT 2.0》 这本书的介绍吧!