Если кто-то знает больше способов сделать это в .NET, а также каково ваше мнение об этом? Какой подход вы выбираете и почему?Подходы копирования объектов в .net: Auto Mapper, Emit Mapper, Implicit Operation, Property Copy
Вот тесты различных способов копирования объектов в .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);
}
Результаты испытаний на моем компьютере:
Test Auto Mapper: 22322 мс
Испытание Неявный оператор: 310 мс
Test Copy Property: 250 мс
Тест Испустите Mapper: 281 мс
Вы можете получить испускают и авто -mappers здесь:
http://emitmapper.codeplex.com/
http://automapper.codeplex.com/
Это замечательно, но в чем вопрос? – Oded
Да, я не вижу смысла в этом. Вам нужна цель, прежде чем вы даже сможете решить, что вам нужна копия (вместо использования исходного объекта), и вам нужна цель, чтобы выбрать правильный подход. Тем не менее, другим копиром является MemberwiseClone(). – Qwertie
Вы пытаетесь создать копию объекта для тестирования. Я не понимаю вопроса ... вы можете использовать mole в .net4 ... Mapper работал бы лучше. Но, пожалуйста, уточните свой вопрос. –