copia de un objeto se acerca en .net: Auto Mapper, emiten Mapper, implícito operación, la propiedad de copia

StackOverflow https://stackoverflow.com/questions/3457657

Pregunta

Si alguien sabe alguna más formas de hacer esto en .NET, y también lo es su opinión acerca de que se aproxima? ¿Qué enfoque que elija y por qué?

Aquí es las pruebas de los diferentes modos de copia de un objeto en .NET.

Las pruebas relacionadas a este hilo original: Cómo copiar el valor de la clase X a la clase Y con el mismo nombre de la propiedad en c #?

Por lo tanto, aquí está, se puede ejecutar por sí mismo:

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);
    }

Los resultados del examen en mi PC:

Auto Test Mapper: 22322 ms

Prueba del operador implícito: 310 ms

Copia de prueba del inmueble: 250 ms

Prueba Emit Mapper: 281 ms

Se puede obtener emiten y -mappers automóviles desde aquí:

http://emitmapper.codeplex.com/

http://automapper.codeplex.com/

¿Fue útil?

Solución

También es posible usar T4 para generar clases que van a generar código de copia propiedad.

Buena: corre tan rápido como es posible Malo: "codificación" en la T4 Feo: Hacer scripts de construcción que le permiten compilar todo de una sola vez

Otros consejos

Ha intentado reemplazando el método Clone para copiar instancias de objetos? De esta manera, se obtiene un nuevo objeto estudiante como esto:

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

Me parece este enfoque, la manera más fácil de copiar objetos en nuevos objetos, aunque no he hecho ningún test de velocidad para averiguar qué tan bien se lleva a cabo en contra de los métodos que usted sugiere.

Clon es para la copia del mismo tipo no para copiar a partir de 2 objetos diferentes tipos entonces no se pueden utilizar para este ámbito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top