AutoMapper和EmitMapper的性能对比

想必大家对[对象映射]并不陌生,本文为你带来AutoMapper和EmitMapper的性能分析,废话不多说,直接上测试代码。

【1】
 Person person = new Person()
{
    name = "Leo",
    age = "200",
    address = "asdhkjahsd",
    basePerson = new BasePerson()
    {
        school = "xxx"
    }
};
int count = 10000;
List list = new List();
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < count; i++)
{
    PersonA personA = ObjectMapperManager.DefaultInstance.GetMapper().Map(person);
    list.Add(personA);
}
watch.Stop();
Console.WriteLine("EmitMapper---");
Console.WriteLine(watch.Elapsed);

List list1 = new List();
Stopwatch watch1 = new Stopwatch();
watch1.Start();
Mapper.CreateMap();

for (int i = 0; i < count; i++)
{
    PersonA personA = Mapper.Map(person); ;
    list1.Add(personA);
}
watch1.Stop();
Console.WriteLine("AutoMapper---");
Console.WriteLine(watch1.Elapsed);
public class Person
{
     public string name { get; set; }
     public string age { get; set; }
     public string address { get; set; }
     public BasePerson basePerson { get; set; }
 }
 public class PersonA
 {
     public string name { get; set; }
     public string age { get; set; }
     public string address { get; set; }
     public BasePerson basePerson { get; set; }
 }
 public class BasePerson
 {
     public string school { get; set; }
 }

老司机可以直接略过这里,关于这里针对新手多说两句Stopwatch这个类,可能新手对这个类还不太熟悉,会问为什么不使用DateTime类型,使用开始时间和结束时间相减计算最终消耗的时间?
答:Stopwatch类型属于高精度时间戳,在对测试代码效率这方面精准度比DateTime会好,具体的StopWatch的使用可以自行查阅。

为了防止Heap扩容/GC带来的误差,一般测4次:
1.A
2.B
3.B
4.A

其实还有一种方法,预分配一个很大的对象,强制让Heap扩容 并且让GC阈值增大。
再通过一个互斥锁去控制多条线程并行的去执行你的代码。
前提条件是你的CPU有足够的核心数。
还有不能开超线程

每个人的测试结果有可能最终都不会相同 受个人电脑配置影响!

最终测试结果:

AutoMapper和EmitMapper的性能对比_第1张图片
Paste_Image.png
AutoMapper和EmitMapper的性能对比_第2张图片
Paste_Image.png
AutoMapper和EmitMapper的性能对比_第3张图片
Paste_Image.png
AutoMapper和EmitMapper的性能对比_第4张图片
Paste_Image.png

大家可以明显的看到EmitMapper的性能执行10000次反射大概是AutoMapper的3-4.5倍之间,尤为可惜的是EmitMapper的作者早在2010年已经停止更新,有兴趣的同学可以去CodePlex去下载源码看一下。
传送门 :http://emitmapper.codeplex.com/

你可能感兴趣的:(AutoMapper和EmitMapper的性能对比)