# Nuget 下版本

# 测试代码

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

# 测试结果

速度对比:
AutoMapper ~ 10 倍 传统映射
EmitMapper ~ 1.5 倍 传统映射

# PS: 不考虑系统栈等等其他开销的情况下

更新于 阅读次数