.net中的对象复制方法:自动映射器,发射映射器,隐式操作,属性复制

如果有人知道在.NET中执行此操作的更多方法,您对此方法的看法是什么? 您选择哪种方法?为什么?

以下是.NET中不同对象复制方式的测试。

与此原始线程相关的测试: 如何使用c#中的相同属性名称将值从类X复制到类Y?

所以,在这里,你可以自己运行它:

static void Main(string[] args) { Student _student = new Student(); _student.Id = 1; _student.Name = "Timmmmmmmmaaaahhhh"; _student.Courses = new List(); _student.Courses.Add(101); _student.Courses.Add(121); Stopwatch sw = new Stopwatch(); Mapper.CreateMap(); StartTest(sw, "Auto Mapper"); for (int i = 0; i < 1000000; i++) { StudentDTO dto = Mapper.Map(_student); } StopTest(sw); StartTest(sw, "Implicit Operator"); for (int i = 0; i < 1000000; i++) { StudentDTO itemT = _student; } StopTest(sw); StartTest(sw, "Property Copy"); for (int i = 0; i < 1000000; i++) { StudentDTO itemT = new StudentDTO { Id = _student.Id, Name = _student.Name, }; itemT.Courses = new List(); foreach (var course in _student.Courses) { itemT.Courses.Add(course); } } StopTest(sw); StartTest(sw, "Emit Mapper"); ObjectsMapper emitMapper = ObjectMapperManager.DefaultInstance.GetMapper(); for (int i = 0; i < 1000000; i++) { StudentDTO itemT = emitMapper.Map(_student); } StopTest(sw); } 

在我的电脑上测试结果:

测试自动映射器:22322毫秒

测试隐式算子:310毫秒

测试属性复制:250毫秒

测试发射映射器:281毫秒

你可以从这里获得发射和自动映射:

http://emitmapper.codeplex.com/

http://automapper.codeplex.com/

也可以使用T4生成将生成属性复制代码的类。

好:尽可能快地运行坏:T4中的“编码”丑陋:制作允许你一次性编译它的构建脚本

您是否尝试重写Clone方法来复制对象实例? 这样,你得到一个像这样的新学生对象:

 for (int i = 0; i < 1000000; i++) { StudentDTO itemT = _student.Clone(); } 

我发现这种方法是将对象复制到新对象的最简单方法,尽管我还没有进行任何速度测试来找出它对你建议的方法的执行情况。

克隆用于复制相同类型而不是用于从2个不同对象复制类型然后不能用于此范围。