AutoMapper和EmitMapper的性能对比

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

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

List<PersonA> list1 = new List<PersonA>();
Stopwatch watch1 = new Stopwatch();
watch1.Start();
Mapper.CreateMap<Person, PersonA>();

for (int i = 0; i < count; i++)
{
    PersonA personA = Mapper.Map<PersonA>(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有足够的核心数。
还有不能开超线程

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

最终测试结果:

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容