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:不调用TinyMapper.Bind<;TTarget,TSource>;();导致性能问

TinyMapper.Bind<TTarget, TSource>()生成映射代码,即查找所有字段、属性,然后创建IL代码,最后使用适当的映射方法创建对象。所以,是的,它很贵。

尝试只调用TinyMapper.Bind一次。CompositionRoot是注册所有绑定的好地方。

另一个选项:如果TargetSource类型很简单,即不使用任何忽略或特殊映射。您只呼叫TinyMapper.Bind<TTarget, TSource>(),因此根本不能呼叫Bind并呼叫Map。在这种简单的情况下,Map调用Bind,并且只调用一次。