public JsonTypeMemberEntry(string jsonName, FieldInfo fieldInfo) { IsEscapingRequired = JsonWriter.IsEscapingRequired(jsonName); MemberType = fieldInfo.FieldType; ReadValue = Accelerator.CreateInstanceGetter(fieldInfo); if (!fieldInfo.IsInitOnly) { WriteValue = Accelerator.CreateInstanceSetter(fieldInfo); } }
public static MeasuringData[] CompareFieldAccess_AcceleratorReflection() { Example[] examples = TestEnvironment.Examples; int m = examples.Length - 1; FieldInfo fi1 = typeof(Example).GetField("DirectValue1"); FieldInfo fi2 = typeof(Example).GetField("DirectValue2"); Func1 getValue1 = Accelerator.CreateInstanceGetter(fi1); Func1 getValue2 = Accelerator.CreateInstanceGetter(fi2); Action a1 = () => { int res = 0; for (int i = 0; i < m; i++) { for (int z = 0; z < c_RepetitionCount; z++) { res = TestHelpers.Calculate(res, (int)getValue1(examples[i]), (int)getValue2(examples[i + 1])); } } TestHelpers.SaveValue(res); }; Action a2 = () => { int res = 0; for (int i = 0; i < m; i++) { for (int z = 0; z < c_RepetitionCount; z++) { res = TestHelpers.Calculate(res, (int)fi1.GetValue(examples[i]), (int)fi2.GetValue(examples[i + 1])); } } TestHelpers.SaveValue(res); }; return(TestEnvironment.Measure(a1, a2)); }