static void Main(string[] args) { var autoCopy = AutoCopy.CreateMap <Customer, CustomerInfo>(); autoCopy .ForMember(p => p.zipCode, opt => opt.MapFrom(p => p.Address.ZipCode)) .ForMember(p => p.PhoneNumber, opt => opt.MapFrom(p => p.Phone.Number)); autoCopy.Register(); AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap <Customer, CustomerInfo>() .ForMember(p => p.zipCode, opt => opt.MapFrom(p => p.Address.ZipCode)) .ForMember(p => p.PhoneNumber, opt => opt.MapFrom(p => p.Phone.Number)) ); #if !DEBUG int loop = 100000; #else int loop = 10; #endif Clock.BenchmarkTime("hand map", () => { Customer customer = new Customer(); CustomerInfo customerInfo = new CustomerInfo(); customer.Address = new Address { ZipCode = "1234567890" }; customer.Phone = new Telephone { Number = "17791704580" }; customer.Memo = "customer"; ShallowCopy(customerInfo, customer); }, loop); Clock.BenchmarkTime("AutoCopy", () => { Customer customer = new Customer(); CustomerInfo customerInfo = new CustomerInfo(); customer.Address = new Address { ZipCode = "1234567890" }; customer.Phone = new Telephone { Number = "17791704580" }; customer.Memo = "customer"; autoCopy.ShallowCopy(customer, customerInfo); }, loop); Clock.BenchmarkTime("AutoMapper", () => { Customer customer = new Customer(); customer.Address = new Address { ZipCode = "1234567890" }; customer.Phone = new Telephone { Number = "17791704580" }; customer.Memo = "customer"; var customerInfo = AutoMapper.Mapper.Map <CustomerInfo>(customer); }, loop); }
static void Main(string[] args) { //初始化NameValueCollection string surl = "id=10010&width=10&height=10&ua=ua&ip=127.0.0.1&imei=00000000000000&android_id=A00000000000000&make=1111111111&model=XXX&os=android&osv=4.0.1&connectionType=1&deviceType=1&mac=0.0.0.0.0.0.0&screenWidth=100&screenHeight=100&appName=test&ppi=600&dpidsha1=dpidsha1&plmn=1&orientation=1&pos=1&instl=true&ver=1.0.0&bundle=bundle"; HttpQueryCollection collection = new HttpQueryCollection(surl, false); //初始化AutoCopy var ac = AutoCopy.CreateMap <Ext, NameValueCollection>(); ac.Provider = new HttpRequestParamsExpressionProvider(typeof(NameValueCollection)); var autoCopy = AutoCopy.CreateMap <Data, NameValueCollection>(); autoCopy.ForMember(p => p.ext, opt => opt.MapFrom(p => ac.Map(p))); autoCopy.Provider = new HttpRequestParamsExpressionProvider(typeof(NameValueCollection)); autoCopy.Register(); //测试开始 Stopwatch sw = new Stopwatch(); #if !DEBUG int loop = 1000000; #else int loop = 10; #endif sw.Start(); for (int i = 0; i < loop; i++) { Data data; TryParse(collection, out data); } sw.Stop(); Console.WriteLine("手写解析方法循环" + loop + "次耗时" + sw.ElapsedMilliseconds + "毫秒"); sw.Restart(); for (int i = 0; i < loop; i++) { Data data; data = autoCopy.Map(collection); } sw.Stop(); Console.WriteLine("自动解析方法循环" + loop + "次耗时" + sw.ElapsedMilliseconds + "毫秒 fastmode:" + autoCopy.IsFastMode); // var autoCopy = AutoCopy.CreateMap<CustomerInfo, Customer>(); // autoCopy // .ForMember(p => p.zipCode, opt => opt.MapFrom(p => p.Address.ZipCode)) // .ForMember(p => p.PhoneNumber, opt => opt.MapFrom(p => p.Phone.Number)); // autoCopy.Register(); //#if !DEBUG // int loop = 10000000; //#else // int loop = 10; //#endif // Stopwatch sw = new Stopwatch(); // sw.Restart(); // for (int i = 0; i < loop; i++) // { // Customer customer = new Customer(); // CustomerInfo customerInfo = new CustomerInfo(); // customer.Address = new Address { ZipCode = "1234567890" }; // customer.Phone = new Telephone { Number = "17791704580" }; // customer.Memo = "测试默认拷贝"; // ShallowCopy(customerInfo, customer); // } // sw.Stop(); // Console.WriteLine(sw.ElapsedMilliseconds); // sw.Restart(); // for (int i = 0; i < loop; i++) // { // Customer customer = new Customer(); // CustomerInfo customerInfo = new CustomerInfo(); // customer.Address = new Address { ZipCode = "1234567890" }; // customer.Phone = new Telephone { Number = "17791704580" }; // customer.Memo = "测试默认拷贝"; // autoCopy.ShallowCopy(customerInfo, customer); // } // sw.Stop(); // Console.WriteLine(sw.ElapsedMilliseconds); // Customer c = new Customer(); // c.Address = new Address { ZipCode = "1234567890" }; // c.Phone = new Telephone { Number = "17791704580" }; // c.Memo = "测试默认拷贝"; // var ci = autoCopy.Map(c); // var propertyInfo = PropertyHelper<Customer>.GetProperty(p => p.Address.ZipCode); // var parameter = Expression.Parameter(typeof(Customer), "c"); // var body = Expression.MakeMemberAccess(parameter, propertyInfo); // var func = Expression.Lambda(body, parameter).Compile(); }