Author: gbayon
Date: Mon Mar 13 10:32:04 2006
New Revision: 385615
URL: http://svn.apache.org/viewcvs?rev=385615&view=rev
Log:
- Added class Timer to do Unit test
- Updated 2005 solution
Added:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
(with props)
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.2005.csproj
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.csproj
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/ObjectFactoryTest.cs
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/PropertyAccessorTest.cs
ibatis/trunk/cs/mapper/IBatisNet.Common/IBatisNet.Common.2005.csproj
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/EmitObjectFactory.cs
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectFactory.cs
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.2005.csproj
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.2005.csproj?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.2005.csproj
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.2005.csproj
Mon Mar 13 10:32:04 2006
@@ -103,6 +103,7 @@
<Compile Include="Domain\Account.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Domain\Simple.cs" />
<Compile Include="NUnit\CommonTests\ConfigWatcher\ConfigWatcherTest.cs">
<SubType>Code</SubType>
</Compile>
@@ -130,10 +131,12 @@
<Compile Include="NUnit\CommonTests\Transaction\TransactionTest.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="NUnit\CommonTests\Utilities\ObjectFactoryTest.cs" />
<Compile Include="NUnit\CommonTests\Utilities\PropertyAccessorTest.cs" />
<Compile Include="NUnit\CommonTests\Utilities\ResourcesTest.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="NUnit\CommonTests\Utilities\Timer.cs" />
<Compile Include="NUnit\CommonTests\Utilities\TypeResolverTest.cs" />
<None Include="bin\Debug\dao_Access_OleDb.config" />
<None Include="bin\Debug\dao_MSSQL_Odbc.config" />
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.csproj
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.csproj?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.csproj
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common.Test/IBatisNet.Common.Test.csproj
Mon Mar 13 10:32:04 2006
@@ -305,6 +305,11 @@
BuildAction = "Compile"
/>
<File
+ RelPath = "NUnit\CommonTests\Utilities\Timer.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
RelPath = "Scripts\Access\account-init.sql"
BuildAction = "Content"
/>
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/ObjectFactoryTest.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/ObjectFactoryTest.cs?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/ObjectFactoryTest.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/ObjectFactoryTest.cs
Mon Mar 13 10:32:04 2006
@@ -1,6 +1,3 @@
-using System.ComponentModel;
-using System.Runtime.InteropServices;
-using System.Threading;
using IBatisNet.Common.Test.Domain;
using IBatisNet.Common.Utilities.Objects;
using NUnit.Framework;
@@ -47,7 +44,7 @@
GC.Collect();
GC.WaitForPendingFinalizers();
- HiPerformanceTimer timer = new HiPerformanceTimer();
+ Timer timer = new Timer();
timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
@@ -112,43 +109,5 @@
}
}
- internal class HiPerformanceTimer
- {
- [DllImport("Kernel32.dll")]
- private static extern bool QueryPerformanceCounter(out
long lpPerformanceCount);
-
- [DllImport("Kernel32.dll")]
- private static extern bool
QueryPerformanceFrequency(out long lpFrequency);
-
- private long startTime, stopTime;
- private long freq;
-
- public HiPerformanceTimer()
- {
- startTime = 0;
- stopTime = 0;
-
- if (QueryPerformanceFrequency(out freq) ==
false)
- {
- throw new Win32Exception();
- }
- }
-
- public void Start()
- {
- Thread.Sleep(0);
- QueryPerformanceCounter(out startTime);
- }
-
- public void Stop()
- {
- QueryPerformanceCounter(out stopTime);
- }
-
- public double Duration
- {
- get { return (double) (stopTime -
startTime)/(double) freq; }
- }
- }
}
}
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=385615&r1=385614&r2=385615&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
Mon Mar 13 10:32:04 2006
@@ -39,34 +39,46 @@
const int TEST_ITERATIONS = 1000000;
Account account = new Account();
int test = -1;
+ Timer timer = new Timer();
#region Direct access (fastest)
- long time = DateTime.Now.Ticks;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
test = -1;
test = account.Id;
Assert.AreEqual(0, test);
}
- long directAccessMs = DateTime.Now.Ticks - time;
+ timer.Stop();
+ double directAccessDuration = 1000000 * (timer.Duration
/ (double)TEST_ITERATIONS);
#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;
- test = (int)propertyAccessor.Get(account);
- Assert.AreEqual(0, test);
- }
- long propertyAccessorMs = DateTime.Now.Ticks - time;
- float propertyAccessorRatio = (float)propertyAccessorMs
/ directAccessMs;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ IPropertyAccessor propertyAccessor =
ILPropertyAccessor.CreatePropertyAccessor(typeof(Account), "Id");
+ timer.Start();
+ for (int i = 0; i < TEST_ITERATIONS; i++)
+ {
+ test = -1;
+ test = (int)propertyAccessor.Get(account);
+ Assert.AreEqual(0, test);
+ }
+ timer.Stop();
+ double propertyAccessorDuration = 1000000 *
(timer.Duration / (double)TEST_ITERATIONS);
+ double propertyAccessorRatio = propertyAccessorDuration
/ directAccessDuration;
#endregion
#region IBatisNet.Common.Utilities.Object.ReflectionInfo
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
ReflectionInfo reflectionInfo =
ReflectionInfo.GetInstance(account.GetType());
- time = DateTime.Now.Ticks;
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
test = -1;
@@ -74,13 +86,17 @@
test = (int)propertyInfo.GetValue(account,
null);
Assert.AreEqual(0, test);
}
- long reflectionInfoMs = DateTime.Now.Ticks - time;
- float reflectionInfoRatio = (float)reflectionInfoMs /
directAccessMs;
+ timer.Stop();
+ double reflectionInfoDuration = 1000000 *
(timer.Duration / (double)TEST_ITERATIONS);
+ double reflectionInfoRatio =
(float)reflectionInfoDuration / directAccessDuration;
#endregion
#region Reflection
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
Type type = account.GetType();
- time = DateTime.Now.Ticks;
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
test = -1;
@@ -88,13 +104,16 @@
test = (int)propertyInfo.GetValue(account,
null);
Assert.AreEqual(0, test);
}
- long reflectionMs = DateTime.Now.Ticks - time;
- float reflectionRatio = (float)reflectionMs /
directAccessMs;
+ timer.Stop();
+ double reflectionDuration = 1000000 * (timer.Duration /
(double)TEST_ITERATIONS);
+ double reflectionRatio = reflectionDuration /
directAccessDuration;
#endregion
#region ReflectionInvokeMember (slowest)
- type = account.GetType();
- time = DateTime.Now.Ticks;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
test = -1;
@@ -103,17 +122,18 @@
null, account, null);
Assert.AreEqual(0, test);
}
- long reflectionInvokeMemberMs = DateTime.Now.Ticks -
time;
- float reflectionInvokeMemberRatio =
(float)reflectionInvokeMemberMs / directAccessMs;
+ timer.Stop();
+ double reflectionInvokeMemberDuration = 1000000 *
(timer.Duration / (double)TEST_ITERATIONS);
+ double reflectionInvokeMemberRatio =
reflectionInvokeMemberDuration / directAccessDuration;
#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);
+ Console.WriteLine("Direct access: \t\t{0} ",
directAccessDuration.ToString("F3"));
+ Console.WriteLine("IPropertyAccessor: \t\t{0} Ratio:
{1}", propertyAccessorDuration.ToString("F3"),
propertyAccessorRatio.ToString("F3"));
+ Console.WriteLine("IBatisNet ReflectionInfo: \t{0}
Ratio: {1}", reflectionInfoDuration.ToString("F3"),
reflectionInfoRatio.ToString("F3"));
+ Console.WriteLine("ReflectionInvokeMember: \t{0} Ratio:
{1}", reflectionInvokeMemberDuration.ToString("F3"),
reflectionInvokeMemberRatio.ToString("F3"));
+ Console.WriteLine("Reflection: \t\t\t{0} Ratio: {1}",
reflectionDuration.ToString("F3"), reflectionRatio.ToString("F3"));
}
/// <summary>
@@ -125,72 +145,91 @@
const int TEST_ITERATIONS = 1000000;
Account account = new Account();
int value = 123;
+ Timer timer = new Timer();
#region Direct access (fastest)
- long start = DateTime.Now.Ticks;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
account.Id = value;
}
- long directAccessMs = DateTime.Now.Ticks - start;
+ timer.Stop();
+ double directAccessDuration = 1000000 * (timer.Duration /
(double)TEST_ITERATIONS);
#endregion
#region Property accessor
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
IPropertyAccessor propertyAccessor =
ILPropertyAccessor.CreatePropertyAccessor(typeof(Account), "Id");
- start = DateTime.Now.Ticks;
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
propertyAccessor.Set(account, value);
}
- long propertyAccessorMs = DateTime.Now.Ticks - start;
- float propertyAccessorRatio = (float)propertyAccessorMs
/ directAccessMs;
+ timer.Stop();
+ double propertyAccessorDuration = 1000000 * (timer.Duration /
(double)TEST_ITERATIONS);
+ double propertyAccessorRatio = propertyAccessorDuration /
directAccessDuration;
#endregion
#region IBatisNet.Common.Utilities.Object.ReflectionInfo
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
Type type = account.GetType();
ReflectionInfo reflectionInfo =
ReflectionInfo.GetInstance(type);
- start = DateTime.Now.Ticks;
+ timer.Start();
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;
+ timer.Stop();
+ double reflectionInfoDuration = 1000000 * (timer.Duration /
(double)TEST_ITERATIONS);
+ double reflectionInfoRatio = reflectionInfoDuration /
directAccessDuration;
#endregion
#region Reflection
- type = account.GetType();
- start = DateTime.Now.Ticks;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ timer.Start();
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;
+ timer.Stop();
+ double reflectionDuration = 1000000 * (timer.Duration /
(double)TEST_ITERATIONS);
+ double reflectionRatio = reflectionDuration / directAccessDuration;
#endregion
#region ReflectionInvokeMember (slowest)
- type = account.GetType();
- start = DateTime.Now.Ticks;
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+
+ timer.Start();
for (int i = 0; i < TEST_ITERATIONS; i++)
{
type.InvokeMember("Id",
BindingFlags.Public | BindingFlags.SetProperty |
BindingFlags.Instance,
null, account, new object[] { value });
}
- long reflectionInvokeMemberMs = DateTime.Now.Ticks - start;
- float reflectionInvokeMemberRatio =
(float)reflectionInvokeMemberMs / directAccessMs;
+ timer.Stop();
+ double reflectionInvokeMemberDuration = 1000000 * (timer.Duration
/ (double)TEST_ITERATIONS);
+ double reflectionInvokeMemberRatio =
reflectionInvokeMemberDuration / directAccessDuration;
#endregion
// 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);
+ Console.WriteLine("Direct access: \t\t{0} ",
directAccessDuration.ToString("F3"));
+ Console.WriteLine("IPropertyAccessor: \t\t{0} Ratio: {1}",
propertyAccessorDuration.ToString("F3"), propertyAccessorRatio.ToString("F3"));
+ Console.WriteLine("IBatisNet ReflectionInfo: \t{0} Ratio: {1}",
reflectionInfoDuration.ToString("F3"), reflectionInfoRatio.ToString("F3"));
+ Console.WriteLine("ReflectionInvokeMember: \t{0} Ratio: {1}",
reflectionInvokeMemberDuration.ToString("F3"),
reflectionInvokeMemberRatio.ToString("F3"));
+ Console.WriteLine("Reflection: \t\t\t{0} Ratio: {1}",
reflectionDuration.ToString("F3"), reflectionRatio.ToString("F3"));
}
/// <summary>
Added:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs?rev=385615&view=auto
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
(added)
+++
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
Mon Mar 13 10:32:04 2006
@@ -0,0 +1,46 @@
+using System;
+using System.ComponentModel;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace IBatisNet.Common.Test.NUnit.CommonTests.Utilities
+{
+ public class Timer
+ {
+ [DllImport("Kernel32.dll")]
+ private static extern bool QueryPerformanceCounter(out
long lpPerformanceCount);
+
+ [DllImport("Kernel32.dll")]
+ private static extern bool
QueryPerformanceFrequency(out long lpFrequency);
+
+ private long startTime, stopTime;
+ private long freq;
+
+ public Timer()
+ {
+ startTime = 0;
+ stopTime = 0;
+
+ if (QueryPerformanceFrequency(out freq) ==
false)
+ {
+ throw new Win32Exception();
+ }
+ }
+
+ public void Start()
+ {
+ Thread.Sleep(0);
+ QueryPerformanceCounter(out startTime);
+ }
+
+ public void Stop()
+ {
+ QueryPerformanceCounter(out stopTime);
+ }
+
+ public double Duration
+ {
+ get { return (double) (stopTime -
startTime)/(double) freq; }
+ }
+ }
+}
Propchange:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/Timer.cs
------------------------------------------------------------------------------
svn:keywords = Id LastChangedDate LastChangedBy
Modified: ibatis/trunk/cs/mapper/IBatisNet.Common/IBatisNet.Common.2005.csproj
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common/IBatisNet.Common.2005.csproj?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common/IBatisNet.Common.2005.csproj
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common/IBatisNet.Common.2005.csproj Mon
Mar 13 10:32:04 2006
@@ -192,8 +192,15 @@
<Compile Include="Utilities\HashCodeProvider.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Utilities\Objects\ActivatorFactory.cs" />
+ <Compile Include="Utilities\Objects\ActivatorObjectFactory.cs" />
+ <Compile Include="Utilities\Objects\EmitObjectFactory.cs" />
+ <Compile Include="Utilities\Objects\FactoryBuilder.cs" />
+ <Compile Include="Utilities\Objects\IFactory.cs" />
<Compile Include="Utilities\Objects\ILPropertyAccessor.cs" />
+ <Compile Include="Utilities\Objects\IObjectFactory.cs" />
<Compile Include="Utilities\Objects\IPropertyAccessor.cs" />
+ <Compile Include="Utilities\Objects\ObjectFactory.cs" />
<Compile Include="Utilities\Objects\ObjectProbe.cs">
<SubType>Code</SubType>
</Compile>
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/EmitObjectFactory.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/EmitObjectFactory.cs?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/EmitObjectFactory.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/EmitObjectFactory.cs
Mon Mar 13 10:32:04 2006
@@ -32,10 +32,12 @@
/// <summary>
/// A factory that can create objects via IL code
/// </summary>
- public class EmitObjectFactory : IObjectFactory
+ public sealed class EmitObjectFactory : IObjectFactory
{
private IDictionary _cachedfactories = new HybridDictionary();
private FactoryBuilder _factoryBuilder = null;
+ private object _padlock = new object();
+
/// <summary>
///
@@ -55,10 +57,17 @@
public IFactory CreateFactory(Type typeToCreate)
{
IFactory factory = (IFactory)
_cachedfactories[typeToCreate];
- if (null == factory)
+ if (factory == null)
{
- factory =
_factoryBuilder.CreateFactory(typeToCreate);
- _cachedfactories[typeToCreate] = factory;
+ lock (_padlock)
+ {
+ factory = (IFactory)
_cachedfactories[typeToCreate];
+ if (factory == null) // double-check
+ {
+ factory =
_factoryBuilder.CreateFactory(typeToCreate);
+ _cachedfactories[typeToCreate]
= factory;
+ }
+ }
}
return factory;
}
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectFactory.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectFactory.cs?rev=385615&r1=385614&r2=385615&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectFactory.cs
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectFactory.cs
Mon Mar 13 10:32:04 2006
@@ -28,7 +28,7 @@
namespace IBatisNet.Common.Utilities.Objects
{
/// <summary>
- /// Description résumée de ObjectFactory.
+ /// A factory to create objects
/// </summary>
public class ObjectFactory : IObjectFactory
{