18

假设我的 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;}
}

我有一个看起来像这样的 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;}
}

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

我正在寻找有关何时使用Automapper、Valueinjector和手动映射的指导。我敢肯定手动映射是最快的,但是要多少呢?

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

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

我问的原因是因为创建了一个名为 emitmapper 的 Codeplex 项目来解决 automapper 中的性能问题,我记得看到一个评论说 automapper 可能需要 0.5ms 来映射一个大类。(需要参考)

我还记得看到一篇文章描述了如果在 70 毫秒内加载而不是 90 毫秒或更长时间,用户如何更有可能留在您的网站上。(我也在寻找这个链接)。如果 automapper 占用了我大部分的页面加载时间,再加上网络延迟,那么我认为有可能不使用 automapper 并为我的大容量页面创建手动类并坚持使用混合方法。

底线:我会自己运行测试,但我对 .NET 内部的了解不够,无法创建可用作可重用指南的准确结果。

4

1 回答 1

4

底线:我会自己运行测试,但我对 .NET 内部的了解不够,无法创建可用作可重用指南的准确结果。

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

于 2011-11-14T14:50:42.783 回答