Skip to content

Commit e11abf2

Browse files
committed
Cache name-hashes in a static var, makes subsequent calls much faster
1 parent 6185baf commit e11abf2

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

MapDataReader/MapperGenerator.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,22 @@ private static void SetPropertyByName(this {typeNodeSymbol.FullName()} target, i
7070
if (typeNodeSymbol.InstanceConstructors.Any(c => !c.Parameters.Any())) //has a constructor without parameters?
7171
{
7272
src += $@"
73+
private static int[] _columnNameHashes{typeNode.Identifier} = null;
7374
7475
public static List<{typeNodeSymbol.FullName()}> To{typeNode.Identifier}(this IDataReader dr)
7576
{{
7677
var list = new List<{typeNodeSymbol.FullName()}>();
7778
7879
if (dr.Read())
7980
{{
80-
int[] columnNameHashes = Enumerable.Range(0, dr.FieldCount).Select(i => MapperGenerator.GetDeterministicHashCode(dr.GetName(i))).ToArray();
81+
if(_columnNameHashes{typeNode.Identifier} == null)
82+
_columnNameHashes{typeNode.Identifier} = Enumerable.Range(0, dr.FieldCount).Select(i => MapperGenerator.GetDeterministicHashCode(dr.GetName(i))).ToArray();
83+
8184
do
8285
{{
8386
var result = new {typeNodeSymbol.FullName()}();
8487
int i = 0;
85-
foreach (var col in columnNameHashes)
88+
foreach (var col in _columnNameHashes{typeNode.Identifier})
8689
{{
8790
var value = dr[i];
8891
if (value is DBNull) value = null;

0 commit comments

Comments
 (0)