• [.NetCore] 下Mapper 测试 传统映射 vs EmitMapper vs AutoMapper


    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("
    传统方法普通映射");
                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:不考虑系统栈等等其他开销的情况下

  • 相关阅读:
    System.in.read() 回车
    eclipse for C/C++
    J2EE和Java EE
    MySQL中的string类型
    javac: 无效的标记: FilesJavajdk1
    java eclipse com.mysql.jdbc.Driver
    (转)apache外网不能访问分析与解决方法
    jvm调优
    java性能调优03
    java性能调优02
  • 原文地址:https://www.cnblogs.com/minskiter/p/11573800.html
Copyright © 2020-2023  润新知