TinyMapper:不调用TinyMapper.Bind<;TTarget,TSource>;();导致性能问
本文关键字:TinyMapper 性能 gt TTarget 调用 Bind lt TSource | 更新日期: 2023-09-27 18:20:35
我有一个程序集,它包含一个将对象从我的Dal实体映射到业务对象的类。这个类映射一些不同的对象(Profile、Address等)。我正在用TinyMapper手动替换贴图。一般情况下:
1.列表映射方法
public IEnumerable<TTarget> MapFromDal(IEnumerable<TSource> source){
return source.Select(MapSingleFromDal);
}
2.单对象映射方法
public TTarget MapSingleFromDal(TSource source){
//By hand mapping code.
}
在用TinyMapper替换映射代码时,我应该把Bind语句放在哪里?经常打电话贵吗?我的第一个切入点是,我只是把这一行放在我的MapSingleFromDal方法中:
TinyMapper.Bind<TTarget, TSource>();
所以每次映射一个对象时都会调用它。这感觉不对,所以我想知道该把它放在哪里。它应该在这个类的构造函数中吗?它映射了很多对象,所以我应该像这样在构造函数中堆叠调用吗?
TinyMapper.Bind<T1,S1>();
TinyMapper.Bind<T2,S2>();
TinyMapper.Bind<T3,S3>();
当我再次呼叫TinyMapper.Bind<T1,S1>();
时会发生什么?它贵吗?
TinyMapper.Bind<TTarget, TSource>()
生成映射代码,即查找所有字段、属性,然后创建IL代码,最后使用适当的映射方法创建对象。所以,是的,它很贵。
尝试只调用TinyMapper.Bind
一次。CompositionRoot是注册所有绑定的好地方。
另一个选项:如果Target
和Source
类型很简单,即不使用任何忽略或特殊映射。您只呼叫TinyMapper.Bind<TTarget, TSource>()
,因此根本不能呼叫Bind
并呼叫Map
。在这种简单的情况下,Map
调用Bind
,并且只调用一次。