• 优化反射之开始


    继上篇上篇的用Emit 代替直白反射或者是目的是优化反射,初步窥探了一下 Emit概貌,现在开始慢慢切入主题:
     场景如下: 1.去数据库更新一个类,如果不是用的 EF等ORM 组件需要自己手动去修改一个类的改动字段,然后插入数据库。现在给出反射方法,Demo如下:

         public static void RefSetValue<T>(T t1_entity, T t2_entity) where T : class, new()
            {
                //t2_entity 值赋值给 t1_entity
                var proinfo = t1_entity.GetType().GetProperties();
                var temp_type = t2_entity.GetType();
                proinfo.ToList().ForEach(p =>
                {
                    var value = p.GetValue(t1_entity, null);
                    var value2 = temp_type.GetProperty(p.Name).GetValue(t2_entity, null);
                    if (value2 != null && value != null)
                    {
                        if (!value.Equals(value2))
                        {
    //可动态生成 sql 跟新字段 p.SetValue(t1_entity, value2,
    null); } } }); }

    用法:

            static void Main(string[] args)
            {
                var user = new Entity.UserBase();
                user.Name = "user1";
                var user2 = new Entity.UserBase();
                user2.Name = "user2";
                RefSetValue(user, user2);
            }

    即可将需要更新的字段值赋予第一个类从而达到跟新实体修改过的字段。还可以动态拼接好 SQL 语句返回交给 DBHelper 执行。
    PS:问题来了。我们需要优化性能,目前最多有几种方式 大概分为: 1.Emit    2.委托   3.动态编译
     接下来的为大家逐个破解。敬请期待。

  • 相关阅读:
    SQL SERVER 2005 行转列
    为什么jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON
    Silverlight 布局控件
    python socket connection
    linux下缓存的查看/修改
    openstackflat 网络问题
    Fail to start neutronserver
    copy module
    python ConfigParser
    itertools 介绍
  • 原文地址:https://www.cnblogs.com/LiMin/p/5317847.html
Copyright © 2020-2023  润新知