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倍 传统映射