• NBear.Mapping使用教程(5):实体对象与NameValueCollection,Dicitonary以及NBear.Mapping性能


    上篇中,介绍了使用NBear.Mapping进行实体对象与ADO.NET对象的互转功能,这可能是我们开发过程中最常的一种映射了。除此之外,NBear.Mapping还支持实体对象与NameValueCollection,IDictionary等弱类型的互换转,下面就让我们来看看吧。

    NameValueCollection实体对象

    当你希望把Request.QueryString的字段赋值到一个对象时,手工写这段代码你可能会觉得浪费时间了。现在如果NBear.Mapping可能帮你完成这个工作,难道你不会接受吗?只要简单的这样一句代码就可以完成你的工作了。

       1: UserObject outputObject = ObjectConvertor.ToObject<UserObject>(nameValue);

    因为NameValueCollection的Value类型是字符串的,但是没有关系,NBear.Mapping会自动进行类型转换的。反过来,如果想把实体对象转换为NameValueCollection对象时,仍然是一样的简单:

       1: NameValueCollection outputObject = ObjectConvertor.ToObject<NameValueCollection>(user);

    IDictionary与实体对象

    NBear.Mapping支持将实体对象转换为实现了IDictionary的对象,比如Dictionary<string,object>,Hashtable。分别用下面没行代码就可以完成这样的转换:

    Dictionary<string, object> outputObject = ObjectConvertor.ToObject<Dictionary<string, object>>(user);
    Hashtable outputObject = ObjectConvertor.ToObject<Hashtable>(user);

    相反的转换:

    Dictionary<string, object> dic = ObjectConvertor.ToObject<Dictionary<string, object>>(user);
    Hashtable hashTable = ObjectConvertor.ToObject<Hashtable>(user);
    接口使用都是一样的,这里就不再嗸诉(有谁能告知一下Ao Shu是哪两个字 :( )。

    性能

    前面不止一次的说到,NBear.Mapping有比较优的性能。它有比较好的性能是因为它的转换使用的是动态生IL代码来进行转换的,并且生成的IL代码是有缓存的。其实相当于就是动态的手写代码。在NBear.Mapping.Test的MappingTest中,有4个测试TestPerformance1~4就是测试性能的,每一次转换分别执行100000次,随机进行的一次测试结果如下(手写 VS NBearMapping VS 反射 的性能对比,以手写代码为基准):

    DataRow 转实体对象:

    Test performance of converting 100000 data rows to class objects
    Manually Coding vs NBearMapping vs Reflection
    8906250 (1)
    vs
    11718750 (1.31578947368421)
    vs
    26093750 (2.92982456140351)

    实体对象转实体对象

    Test performance of converting 100000 class objects to class objects
    Manually Coding vs NBearMapping vs Reflection
    312500 (1)
    vs
    2187500 (7)
    vs
    15625000 (50)

    DataReader 转实体对象

    Test performance of converting 100000 dataReader to class objects
    Manually Coding vs NBearMapping vs Reflection
    7812500 (1)
    vs
    11406250 (1.46)
    vs
    29531250 (3.78)

    NameValueCollection转实体对象

    Test performance of converting 100000 namevaluecollections to class objects
    Manually Coding vs NBearMapping vs Reflection
    5625000 (1)
    vs
    12812500 (2.27777777777778)
    vs
    16875000 (3)

    到些为止,NBear.Mapping的使用介绍就告一段落了。除此之外,NBear.Mapping还有一些其它功能,比如配置,自定义映射接口,扩展功能等等,这些功能只要你愿意花一些时间很容易就能够掌握了。NBear.Mapping使用其实就是这么简单,它自己本身也是很简单的,只要你愿意尝试,相信它会给你带来意想不到的效果的。

    示例下载

    阿不

    NBear开发团队

  • 相关阅读:
    UBUNTU 自动挂载 NTFS
    automake autoconf 学习笔记(转载)
    error: X11/extensions/XInput.h: No such file or directory
    error: undefined macro: AC_PROG_LIBTOOL
    Linux下tar.xz结尾的文件的解压方法
    Ubuntu 修改hosts
    ubuntu主目录下的中文文件夹名改回英文
    ./configure: No such file or directory
    Ubuntu下GTK的安装、编译和测试
    图像适配源码
  • 原文地址:https://www.cnblogs.com/hjf1223/p/NBear_Mappping_Dictionary_Performance.html
Copyright © 2020-2023  润新知