コード例 #1
0
ファイル: Program.cs プロジェクト: ClockGet/AutoCopy
        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);
        }
コード例 #2
0
        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();
        }