I am wondering if I can make these classes a bit more efficient.
Test Results
Single Run
- Method 1: 5 Columns - Text Query - 81178 Records = 00:00:00.6390366 secs
- Method 2: 5 Columns - Text Query - 81178 Records = 00:00:00.5360307 secs
10 Run Loop
- Method 1: 5 Columns - Text Query - 81178 Records = 00:00:05.3253045 secs
- Method 2: 5 Columns - Text Query - 81178 Records = 00:00:05.0912912 secs
100 Run Loop
- Method 1: 5 Columns - Text Query - 81178 Records = 00:00:54.1270959 secs
- Method 2: 5 Columns - Text Query - 81178 Records = 00:00:53.8710813 secs
All 3 attempts for both methods never peak over 25% CPU usage.
As you can see there really is no significant improvement over either method, and method 2 (judging by CPU usage) does not seem to multi-thread.
I am thinking that if I can get rid of my usage of reflection to map the columns to strongly-typed classes that it would make a significant boost to both methods performance, and I am sure that I can make improvements to the asyncronicity of method 2 as well... I just don't know how.
WrapperTest.cs
private static IList<T> Map<T>(DbDataReader dr) where T : new()
{
try
{
// initialize our returnable list
List<T> list = new List<T>();
// fire up the lamda mapping
var converter = new Converter<T>();
// read in each row, and properly map it to our T object
var obj = converter.CreateItemFromRow(dr);
// reutrn it
return list;
}
catch (Exception ex)
{
// Catch an exception if any, an write it out to our logging mechanism, in addition to adding it our returnable message property
_Msg += "Wrapper.Map Exception: " + ex.Message;
ErrorReporting.WriteEm.WriteItem(ex, "o7th.Class.Library.Data.Wrapper.Map", _Msg);
// make sure this method returns a default List
return default(List<T>);
}
}
This is a continuation of this question.
The code above definitely runs more efficiently now. Is there any way to make it better?
_field
, not_Field
... I guess VB is rubbing off on your C#, don't worry, soon your C# will rub off on your VB ;) \$\endgroup\$