Beispiel #1
0
        private static Func <object[], object> CreateInstanceFactory(Projection projection)
        {
            if (projection.ctor == null)
            {
                return(a => a[0]);
            }
            var compiledCtorDelegate = ReflectionHelpers.GetCompiledDelegate(projection.ctor);

            if (projection.initMembers == null)
            {
                return(arguments => compiledCtorDelegate(null, arguments));
            }
            if (projection.ctor.GetParameters().Length != 0)
            {
                throw new InvalidOperationException("assertion exception");
            }
            var memberAccessors = new MemberAccessor <object> [projection.initMembers.Length];

            for (var i = 0; i < memberAccessors.Length; i++)
            {
                memberAccessors[i] = MemberAccessor <object> .Get(projection.initMembers[i]);
            }
            return(delegate(object[] arguments)
            {
                var result = compiledCtorDelegate(null, emptyObjectArray);
                for (var i = 0; i < memberAccessors.Length; i++)
                {
                    memberAccessors[i].Set(result, arguments[i]);
                }
                return result;
            });
        }
Beispiel #2
0
        public void CanReadProp()
        {
            var accessor = new MemberAccessor(typeof(MemberAccessorTestClass), "NameProp");
            var name     = Guid.NewGuid().ToString();
            var result   = accessor.Get(new MemberAccessorTestClass()
            {
                NameProp = name
            });

            Assert.AreEqual(name, result);
        }
Beispiel #3
0
        private static T GetPropertyValue <T>(Type objType, string propertyName, object obj)
        {
            var                key = objType.FullName + "_" + propertyName;
            object             accessor;
            MemberAccessor <T> typedAccessor;

            if (!accessors.TryGetValue(key, out accessor))
            {
                var property = objType.GetProperty(propertyName);
                typedAccessor = property != null ? MemberAccessor <T> .Get(property) : null;

                accessors.TryAdd(key, typedAccessor);
            }
            else
            {
                typedAccessor = (MemberAccessor <T>)accessor;
            }
            return(typedAccessor == null ? default(T) : typedAccessor.Get(obj));
        }
Beispiel #4
0
        public static void TestSpeed()
        {
            var model    = new Cookie();
            var property = nameof(Cookie.Comment);
            var value    = "1";

            const int itterations = 30000000;
            var       accessor1   = MemberAccessor.Get(model.GetType());
            var       accessor2   = TypeAccessor.Create(model.GetType());

            var timer = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor1[model, property] = value;
                accessor2[model, property] = value;
            }
            timer.Stop();
            Console.WriteLine($"Warmup {timer.ElapsedMilliseconds}ms");

            var timer1 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor1[model, property] = value;
                var read = accessor1[model, property];
            }
            timer1.Stop();
            Console.WriteLine($"PropertyAccessor {timer1.ElapsedMilliseconds}ms");

            var timer2 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor2[model, property] = value;
                var read = accessor1[model, property];
            }
            timer2.Stop();
            Console.WriteLine($"TypeAccessor {timer2.ElapsedMilliseconds}ms");

            var timer4 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor1[model, property] = value;
                var read = accessor1[model, property];
            }
            timer4.Stop();
            Console.WriteLine($"PropertyAccessor {timer4.ElapsedMilliseconds}ms");

            var timer3 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor2[model, property] = value;
                var read = accessor1[model, property];
            }
            timer3.Stop();
            Console.WriteLine($"TypeAccessor {timer3.ElapsedMilliseconds}ms");

            var accessor1Index = accessor1[property];

            var timer5 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor1[model, accessor1Index] = value;
                var read = accessor1[model, accessor1Index];
            }
            timer5.Stop();
            Console.WriteLine($"PropertyAccessor Indexed {timer5.ElapsedMilliseconds}ms");

            var timer6 = Stopwatch.StartNew();

            for (var i = 0; i < itterations; i++)
            {
                accessor2[model, property] = value;
                var read = accessor1[model, property];
            }
            timer6.Stop();
            Console.WriteLine($"TypeAccessor {timer6.ElapsedMilliseconds}ms");
        }
 public void ComplexPropertyGet()
 {
     Assert.AreEqual("United States", countryNameAccessor.Get(person));
 }
 public void SimplePropertyGet()
 {
     Assert.AreEqual("John", forenameAccessor.Get(person));
 }
 public void SimpleFieldGet()
 {
     Assert.AreEqual("John Smith", nameFieldAccessor.Get(person));
 }