DotNet Core 2.2 under test Mapper traditional mapping vs EmitMapper vs AutoMapper

Nuget next version

Test code

using System;
using AutoMapper;
using System.Diagnostics;
using EmitMapper;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            var student = new Student
            {
                Name= "test",
                No = "1234567896766666666666666666666666666666666666666666",
            };
            var watch = new Stopwatch();
            int count = 10000000;

 
            Console.WriteLine();
            Console.WriteLine("Automapper 映射测试");
            MapperConfiguration configuration = new MapperConfiguration(
                cfg =>
                {
                    cfg.CreateMap<Student, StudentDto>();
                });
            var mapper = configuration.CreateMapper();
            watch.Start();
            for (int i = 0; i < count; ++i)
            {
                var studentdto = mapper.Map<Student, StudentDto>(student);
            }
            watch.Stop();
            Console.WriteLine($"时间消耗:{watch.ElapsedMilliseconds}ms");

            Console.WriteLine();
            Console.WriteLine("EmitMapper 映射测试");
            ObjectsMapper<Student, StudentDto> emitMap = ObjectMapperManager.DefaultInstance.GetMapper<Student, StudentDto>();
            watch.Restart();
            for (int i = 0; i < count; ++i)
            {
                StudentDto studentdt = emitMap.Map(student);
            }
            watch.Stop();
            Console.WriteLine($"时间消耗:{watch.ElapsedMilliseconds}ms");

            Console.WriteLine("\n传统方法普通映射");
            watch.Restart();
            for (int i = 0; i < count; ++i)
            {
                var studentDto = new StudentDto
                {
                    Name = student.Name,
                    No = student.No,
                };
            }
            watch.Stop();
            Console.WriteLine($"时间消耗:{watch.ElapsedMilliseconds}ms");





        }
    }

    public class StudentDto
    {
        public string Name{ get; set; }
        public string No { get; set; }
    }

    public class Student
    {
        public string Name{ get; set; }
        public string No { get; set; }
    }
}

Test Results

Speed comparison:
AutoMapper ~ 10 times of the traditional mapping
EmitMapper ~ 1.5 times that of traditional mapping

Without considering other expenses of the system stack, and so on: PS

Guess you like

Origin www.cnblogs.com/minskiter/p/11573800.html