MemberwiseClone和反射性能

public class BaseEntity<T> where T : struct
    {
        public T ID { get; set; }

        public void Clone(BaseEntity<T> target)
        {
            target = (BaseEntity<T>)this.MemberwiseClone();
        }

        /// <summary>
        /// 对象间钱拷贝,target为空是,创建新对象
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target">目标</param>
        /// <returns></returns>
        public BaseEntity<T> Copy(BaseEntity<T> target = null, string[] excludeProperties = null)
        {
            if (null == target)
            {
                target = new BaseEntity<T>();
            }

            var type = this.GetType();
            var properties = type.GetProperties();
            var targetType = target.GetType();
            var targetProperties = targetType.GetProperties();
            foreach (var property in properties)
            {
                if (null != excludeProperties && excludeProperties.Contains(property.Name))
                { //不处理
                }
                else
                {
                    if (targetProperties.Select(x => x.Name).Contains(property.Name))
                    {
                        if (property.CanWrite)
                        {
                            property.SetValue(target, property.GetValue(this, null), null);
                        }
                    }
                }
            }
            return target;
        }
    }
View Code
    public class Doctor : BaseEntity<Guid>
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public bool Gender { get; set; }


        public override string ToString()
        {
            StringBuilder sb = new StringBuilder("Doctor{");
            sb.AppendFormat("age={0},", this.Age);
            sb.AppendFormat("name='{0}',", this.Name);
            sb.AppendFormat("gender='{0}'", this.Gender);
            sb.Append("}");
            return sb.ToString();
        }
    }
View Code
static void Main(string[] args)
        {
            AA();
            BB();
            Console.Read();
        }

        static void AA()
        {
            var s = new Doctor()
            {
                ID = Guid.NewGuid(),
                Age = 15,
                Name = "zhangsan",
                Gender = true
            };
            var time = DateTime.Now;
            Console.WriteLine(time);
            for (int i = 0; i < 10000000; i++)
            {
                var s1 = new Doctor();
                s.Clone(s1);
            }
            Console.WriteLine(DateTime.Now.Subtract(time).TotalMilliseconds);
        }

        static void BB()
        {
            var s = new Doctor()
            {
                ID = Guid.NewGuid(),
                Age = 15,
                Name = "zhangsan",
                Gender = true
            };
            var time = DateTime.Now;
            Console.WriteLine(time);
            for (int i = 0; i < 10000000; i++)
            {
                var s1 = new Doctor();
                s.Copy(s1);
            }
            Console.WriteLine(DateTime.Now.Subtract(time).TotalMilliseconds);
        }
View Code

 

posted @ 2021-12-17 11:22  江境纣州  阅读(43)  评论(0编辑  收藏  举报