zoukankan      html  css  js  c++  java
  • [.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:不考虑系统栈等等其他开销的情况下

  • 相关阅读:
    unity导弹算法 预计目标点
    unity编辑器xml数据库插件
    简单Unity时间架构设计(克洛诺斯之匙)
    Unity武器系统的优化
    暴风魔镜安卓手柄输入检测接口
    基于unity的飞行模拟设计
    C#打印日志的小技巧
    启示录
    关于击杀与辅助奖励的方案
    unity抛物线,平均速度下的运动轨迹
  • 原文地址:https://www.cnblogs.com/minskiter/p/11573800.html
Copyright © 2011-2022 走看看