哪个更快:Automapper,Valuinjector或手动映射?每个人的速度到什么程度?

goo*_*ate 16 .net c# automapper emitmapper valueinjecter

假设我的DAL(ORM等)中有这个对象

public class Student
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}
   public Parent Parent {get;set;}
}
public class Parent
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像这样的ViewModel

public class StudentDetailVM
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}

   public string ParentName {get;set;}
   public string ParentPhone {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我需要展平对象.我可以使用Automapper,ValueInjector等工具完成此操作,或者我可以手动执行此操作.如果有许多这样的类要处理,这是一项繁琐的工作,但似乎在这三种方法之间存在性能/开发人员效率权衡.

我在寻找指导时使用Automapper VS Valueinjector VS手动映射.我确定手动映射是最快的,但是多少?

  1. 某些场景是否比其他场景慢得多/更快(例如展平等)?

  2. 使用混合方法在层之间映射对象是否有意义?

我问的原因是因为创建了一个名为emitmapper的Codeplex项目来解决automapper中的性能问题,我记得看到一条评论说自动化器可能需要花费0.5毫秒来映射一个大类.(需要参考)

我还记得看过一篇文章,该文章介绍了如果用户在70毫秒内加载,而不是90毫秒或更长时间,他们在网站上停留的可能性会更高.(我也在寻找这个链接).如果automapper消耗了我的大部分页面加载时间,加上网络延迟,那么我发现有可能不使用automapper并为我的高容量页面创建手动类,并坚持使用混合方法.

一句话:我会自己运行测试,但是我不太了解.NET内部结构来创建可以用作可重用指南的准确结果.

jas*_*son 4

一句话:我会自己运行测试,但是我不太了解.NET内部结构来创建可以用作可重用指南的准确结果.

您不需要了解.NET内部.您只需要知道您的性能要求是什么以及您的典型用法是什么样的.通过各种方式在典型使用场景下对代码进行概要分析,并选择满足您的性能要求且最容易维护的代码(即,不一定选择性能最高的;还有其他标准).

  • 我明白了,所以我认为我可以通过手动映射来保持一致的高性能.任何其他的millage可能会有所不同,在某些情况下,显着. (4认同)