如果有人知道在.NET中使用这种方法的更多方法,以及您对这种方法有何看法?你选择哪种方法,为什么?.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
Test Implicit Operator:310 ms
测试特性复制:250毫秒
测试的Emit映射:281毫秒
你可以从这里发射和经销商-mappers:
http://emitmapper.codeplex.com/
http://automapper.codeplex.com/
这很好,但你的问题是什么? – Oded 2010-08-11 11:15:37
是的,我没有看到这一点。在你决定需要一个副本(而不是使用原始对象)之前,你需要一个目标,并且你需要一个目标来选择正确的方法。也就是说,另一台复印机是MemberwiseClone()。 – Qwertie 2010-11-10 16:30:58
您是否尝试创建一个测试对象的副本..我不明白问题......您可以在.net4中使用痣...... Mapper会最好的工作..但请澄清您的问题 – 2010-11-12 17:55:03