Skip to content

Commit 46be20d

Browse files
committed
decimal: cache Decimal type mappings with ConcurrentDictionary
1 parent 7690920 commit 46be20d

File tree

2 files changed

+4
-128
lines changed

2 files changed

+4
-128
lines changed

src/EFCore.Ydb/src/Storage/Internal/YdbTypeMappingSource.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Concurrent;
23
using System.Collections.Generic;
34
using System.Data;
45
using System.Text.Json;
@@ -110,13 +111,14 @@ RelationalTypeMappingSourceDependencies relationalDependencies
110111
{ typeof(TimeSpan), Interval }
111112
};
112113

114+
private static readonly ConcurrentDictionary<RelationalTypeMappingInfo, RelationalTypeMapping> DecimalCache = new();
115+
113116
protected override RelationalTypeMapping? FindMapping(in RelationalTypeMappingInfo mappingInfo)
114117
{
115118
if (mappingInfo.ClrType == typeof(decimal)
116-
|| string.Equals(mappingInfo.StoreTypeNameBase, "Decimal", StringComparison.OrdinalIgnoreCase)
117119
|| (mappingInfo.StoreTypeName?.StartsWith("Decimal", StringComparison.OrdinalIgnoreCase) ?? false))
118120
{
119-
return Decimal.Clone(mappingInfo);
121+
return DecimalCache.GetOrAdd(mappingInfo, static mi => Decimal.Clone(mi));
120122
}
121123

122124
return base.FindMapping(mappingInfo) ?? FindBaseMapping(mappingInfo)?.Clone(mappingInfo);

src/EFCore.Ydb/test/EntityFrameworkCore.Ydb.FunctionalTests/Query/DecimalParameterYdbTest.cs

Lines changed: 0 additions & 126 deletions
This file was deleted.

0 commit comments

Comments
 (0)