You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by rg...@apache.org on 2006/03/12 22:41:25 UTC
svn commit: r385370 -
/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs
Author: rgrabowski
Date: Sun Mar 12 13:41:24 2006
New Revision: 385370
URL: http://svn.apache.org/viewcvs?rev=385370&view=rev
Log:
Added IBatisNet.Common.Utilities.Objects.ReflectionInfo and System.Reflection.PropertyInfo to performance test cases for property access.
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs
Modified: ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs
URL: http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs?rev=385370&r1=385369&r2=385370&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs Sun Mar 12 13:41:24 2006
@@ -40,10 +40,20 @@
Account account = new Account();
int test = -1;
- // IL Property accessor
- IPropertyAccessor propertyAccessor = ILPropertyAccessor.CreatePropertyAccessor(typeof(Account), "Id");
-
+ #region Direct access (fastest)
long time = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ test = -1;
+ test = account.Id;
+ Assert.AreEqual(0, test);
+ }
+ long directAccessMs = DateTime.Now.Ticks - time;
+ #endregion
+
+ #region IL Property accessor
+ IPropertyAccessor propertyAccessor = ILPropertyAccessor.CreatePropertyAccessor(typeof(Account), "Id");
+ time = DateTime.Now.Ticks;
for (int i = 0; i < TEST_ITERATIONS; i++)
{
test = -1;
@@ -51,38 +61,60 @@
Assert.AreEqual(0, test);
}
long propertyAccessorMs = DateTime.Now.Ticks - time;
+ float propertyAccessorRatio = (float)propertyAccessorMs / directAccessMs;
+ #endregion
- // Direct access
- time = DateTime.Now.Ticks;
- for (int i = 0; i < TEST_ITERATIONS; i++)
- {
- test = -1;
- test = account.Id;
- Assert.AreEqual(0, test);
- }
- long directAccessMs = DateTime.Now.Ticks - time;
-
- // Reflection
- Type type = account.GetType();
- time = DateTime.Now.Ticks;
- for (int i = 0; i < TEST_ITERATIONS; i++)
- {
- test = -1;
- test = (int)type.InvokeMember("Id",
- BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance,
- null, account, null);
- Assert.AreEqual(0, test);
- }
- long reflectionMs = DateTime.Now.Ticks - time;
-
- // Print results
- Console.WriteLine(
- TEST_ITERATIONS.ToString() + " property gets on integer..."
- + "\nDirect access : \t\t" + directAccessMs.ToString() + " ms"
- + "\nIPropertyAccessor : \t\t" + propertyAccessorMs.ToString()+ " ms Ratio: " + (((float)propertyAccessorMs / directAccessMs)).ToString()
- + "\nReflection : \t\t\t" + reflectionMs.ToString() + " ms Ratio: " + (((float)reflectionMs / directAccessMs)).ToString());
+ #region IBatisNet.Common.Utilities.Object.ReflectionInfo
+ ReflectionInfo reflectionInfo = ReflectionInfo.GetInstance(account.GetType());
+ time = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ test = -1;
+ PropertyInfo propertyInfo = reflectionInfo.GetGetter("Id");
+ test = (int)propertyInfo.GetValue(account, null);
+ Assert.AreEqual(0, test);
+ }
+ long reflectionInfoMs = DateTime.Now.Ticks - time;
+ float reflectionInfoRatio = (float)reflectionInfoMs / directAccessMs;
+ #endregion
+
+ #region Reflection
+ Type type = account.GetType();
+ time = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ test = -1;
+ PropertyInfo propertyInfo = type.GetProperty("Id", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance);
+ test = (int)propertyInfo.GetValue(account, null);
+ Assert.AreEqual(0, test);
+ }
+ long reflectionMs = DateTime.Now.Ticks - time;
+ float reflectionRatio = (float)reflectionMs / directAccessMs;
+ #endregion
+
+ #region ReflectionInvokeMember (slowest)
+ type = account.GetType();
+ time = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ test = -1;
+ test = (int)type.InvokeMember("Id",
+ BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance,
+ null, account, null);
+ Assert.AreEqual(0, test);
+ }
+ long reflectionInvokeMemberMs = DateTime.Now.Ticks - time;
+ float reflectionInvokeMemberRatio = (float)reflectionInvokeMemberMs / directAccessMs;
+ #endregion
+
+ // Print results
+ Console.WriteLine("{0} property gets on integer...", TEST_ITERATIONS);
+ Console.WriteLine("Direct access: \t\t{0} ms", directAccessMs);
+ Console.WriteLine("IPropertyAccessor: \t\t{0} ms Ratio: {1}", propertyAccessorMs, propertyAccessorRatio);
+ Console.WriteLine("IBatisNet ReflectionInfo: \t{0} ms Ratio: {1}", reflectionInfoMs, reflectionInfoRatio);
+ Console.WriteLine("ReflectionInvokeMember: \t{0} ms Ratio: {1}", reflectionInvokeMemberMs, reflectionInvokeMemberRatio);
+ Console.WriteLine("Reflection: \t\t\t{0} ms Ratio: {1}", reflectionMs, reflectionRatio);
}
-
/// <summary>
/// Test the performance of getting an integer property.
@@ -94,25 +126,53 @@
Account account = new Account();
int value = 123;
- // Property accessor
+ #region Direct access (fastest)
+ long start = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ account.Id = value;
+ }
+ long directAccessMs = DateTime.Now.Ticks - start;
+ #endregion
+
+ #region Property accessor
IPropertyAccessor propertyAccessor = ILPropertyAccessor.CreatePropertyAccessor(typeof(Account), "Id");
- long start = DateTime.Now.Ticks;
+ start = DateTime.Now.Ticks;
for (int i = 0; i < TEST_ITERATIONS; i++)
{
propertyAccessor.Set(account, value);
}
long propertyAccessorMs = DateTime.Now.Ticks - start;
+ float propertyAccessorRatio = (float)propertyAccessorMs / directAccessMs;
+ #endregion
- // Direct access
- start = DateTime.Now.Ticks;
- for (int i = 0; i < TEST_ITERATIONS; i++)
- {
- account.Id = value;
- }
- long directAccessMs = DateTime.Now.Ticks - start;
+ #region IBatisNet.Common.Utilities.Object.ReflectionInfo
+ Type type = account.GetType();
+ ReflectionInfo reflectionInfo = ReflectionInfo.GetInstance(type);
+ start = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ PropertyInfo propertyInfo = reflectionInfo.GetSetter("Id");
+ propertyInfo.SetValue(account, value, null);
+ }
+ long reflectionInfoMs = DateTime.Now.Ticks - start;
+ float reflectionInfoRatio = (float)reflectionInfoMs / directAccessMs;
+ #endregion
+
+ #region Reflection
+ type = account.GetType();
+ start = DateTime.Now.Ticks;
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ PropertyInfo propertyInfo = type.GetProperty("Id", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance);
+ propertyInfo.SetValue(account, value, null);
+ }
+ long reflectionMs = DateTime.Now.Ticks - start;
+ float reflectionRatio = (float)reflectionMs / directAccessMs;
+ #endregion
- // Reflection
- Type type = account.GetType();
+ #region ReflectionInvokeMember (slowest)
+ type = account.GetType();
start = DateTime.Now.Ticks;
for (int i = 0; i < TEST_ITERATIONS; i++)
{
@@ -120,16 +180,18 @@
BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance,
null, account, new object[] { value });
}
- long reflectionMs = DateTime.Now.Ticks - start;
+ long reflectionInvokeMemberMs = DateTime.Now.Ticks - start;
+ float reflectionInvokeMemberRatio = (float)reflectionInvokeMemberMs / directAccessMs;
+ #endregion
- // Print results
- Console.WriteLine(
- TEST_ITERATIONS.ToString() + " property sets on integer..."
- + "\nDirect access : \t\t" + directAccessMs.ToString() + " ms"
- + "\nPropertyAccessor : \t\t" + propertyAccessorMs.ToString() + " ms Ratio: " + (((float)propertyAccessorMs / directAccessMs)).ToString()
- + "\nReflection : \t\t\t" + reflectionMs +" ms Ratio: " + (((float)reflectionMs / directAccessMs)).ToString());
+ // Print results
+ Console.WriteLine("{0} property sets on integer...", TEST_ITERATIONS);
+ Console.WriteLine("Direct access: \t\t{0} ms", directAccessMs);
+ Console.WriteLine("IPropertyAccessor: \t\t{0} ms Ratio: {1}", propertyAccessorMs, propertyAccessorRatio);
+ Console.WriteLine("IBatisNet ReflectionInfo: \t{0} ms Ratio: {1}", reflectionInfoMs, reflectionInfoRatio);
+ Console.WriteLine("ReflectionInvokeMember: \t{0} ms Ratio: {1}", reflectionInvokeMemberMs, reflectionInvokeMemberRatio);
+ Console.WriteLine("Reflection: \t\t\t{0} ms Ratio: {1}", reflectionMs, reflectionRatio);
}
-
/// <summary>
/// Test the performance of getting an integer property.