如果有人知道在.NET中执行此操作的更多方法,您对此方法的看法是什么?您选择哪种方法?为什么?
以下是.NET中不同对象复制方式的测试。
与此原始帖子相关的测试:How to copy value from class X to class Y with the same property name in c#?
所以,就是这样,你可以自己运行它:
static void Main(string[] args)
{
Student _student = new Student();
_student.Id = 1;
_student.Name = "Timmmmmmmmaaaahhhh";
_student.Courses = new List<int>();
_student.Courses.Add(101);
_student.Courses.Add(121);
Stopwatch sw = new Stopwatch();
Mapper.CreateMap<Student, StudentDTO>();
StartTest(sw, "Auto Mapper");
for (int i = 0; i < 1000000; i++)
{
StudentDTO dto = Mapper.Map<Student, StudentDTO>(_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<int>();
foreach (var course in _student.Courses)
{
itemT.Courses.Add(course);
}
}
StopTest(sw);
StartTest(sw, "Emit Mapper");
ObjectsMapper<Student, StudentDTO> emitMapper = ObjectMapperManager.DefaultInstance.GetMapper<Student, StudentDTO>();
for (int i = 0; i < 1000000; i++)
{
StudentDTO itemT = emitMapper.Map(_student);
}
StopTest(sw);
}
在我的电脑上测试结果:
测试自动映射器:22322 ms
测试隐式算子:310 ms
测试属性副本:250毫秒
测试发射映射器:281毫秒
您可以从此处获取发射和自动映射:
答案 0 :(得分:4)
也可以使用T4生成将生成属性复制代码的类。
好:尽可能快地跑 坏:T4中的“编码” 丑陋:制作构建脚本,允许您一次性编译它
答案 1 :(得分:1)
您是否尝试重写Clone方法来复制对象实例?这样,你得到一个像这样的新学生对象:
for (int i = 0; i < 1000000; i++)
{
StudentDTO itemT = _student.Clone();
}
我发现这种方法是将对象复制到新对象的最简单方法,但我没有进行任何速度测试,以找出它对你建议的方法的效果。
答案 2 :(得分:1)
克隆用于复制相同类型而不是用于从2个不同对象复制类型然后不能用于此范围。