Skip to content

Commit ff2ff6b

Browse files
committed
ValueFieldAccessorResolver: Getting value accessors re-arranged
Some types are more frequent to get accessor than others. For example - long, int and guid are frequent key values, entity version values so one of them will be in every query. - boolean fields are probably also frequent type amont model fields - DateTime/DateTimeOffset can be a time stamp for each row. - Double and decimal values are about money/amout of something/etc, they are more important than some other types. At the same time unsigned integers and Byte/SByte are, to me, used less frequently. It's a small optimization but difference between finding accessor on first and last check is ~2.5x and we always had to make 5-6 checks before reaching long which is, i believe, the most frequent key value type.
1 parent c311e8c commit ff2ff6b

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

Orm/Xtensive.Orm/Tuples/Packed/TupleLayout.cs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -61,42 +61,42 @@ public static ValueFieldAccessor GetValue(Type probeType)
6161

6262
ValueFieldAccessor ResolveByType(Type type)
6363
{
64-
return ReferenceEquals(type, WellKnownTypes.Bool) ? BoolAccessor :
65-
ReferenceEquals(type, WellKnownTypes.Byte) ? ByteAccessor :
66-
ReferenceEquals(type, WellKnownTypes.SByte) ? SByteAccessor :
67-
ReferenceEquals(type, WellKnownTypes.Int16) ? Int16Accessor :
68-
ReferenceEquals(type, WellKnownTypes.UInt16) ? UInt16Accessor :
64+
return ReferenceEquals(type, WellKnownTypes.Int64) ? Int64Accessor :
65+
ReferenceEquals(type, WellKnownTypes.Guid) ? GuidAccessor :
6966
ReferenceEquals(type, WellKnownTypes.Int32) ? Int32Accessor :
70-
ReferenceEquals(type, WellKnownTypes.UInt32) ? UInt32Accessor :
71-
ReferenceEquals(type, WellKnownTypes.Int64) ? Int64Accessor :
72-
ReferenceEquals(type, WellKnownTypes.UInt64) ? UInt64Accessor :
73-
ReferenceEquals(type, WellKnownTypes.Single) ? SingleAccessor :
74-
ReferenceEquals(type, WellKnownTypes.Double) ? DoubleAccessor :
67+
ReferenceEquals(type, WellKnownTypes.Bool) ? BoolAccessor :
7568
ReferenceEquals(type, WellKnownTypes.DateTime) ? DateTimeAccessor :
7669
ReferenceEquals(type, WellKnownTypes.TimeSpan) ? TimeSpanAccessor :
70+
ReferenceEquals(type, WellKnownTypes.Double) ? DoubleAccessor :
7771
ReferenceEquals(type, WellKnownTypes.Decimal) ? DecimalAccessor :
78-
ReferenceEquals(type, WellKnownTypes.Guid) ? GuidAccessor :
79-
ReferenceEquals(type, WellKnownTypes.DateTimeOffset) ? DateTimeOffsetAccessor : null;
72+
ReferenceEquals(type, WellKnownTypes.Single) ? SingleAccessor :
73+
ReferenceEquals(type, WellKnownTypes.DateTimeOffset) ? DateTimeOffsetAccessor :
74+
ReferenceEquals(type, WellKnownTypes.Int16) ? Int16Accessor :
75+
ReferenceEquals(type, WellKnownTypes.Byte) ? ByteAccessor :
76+
ReferenceEquals(type, WellKnownTypes.SByte) ? SByteAccessor :
77+
ReferenceEquals(type, WellKnownTypes.UInt16) ? UInt16Accessor :
78+
ReferenceEquals(type, WellKnownTypes.UInt32) ? UInt32Accessor :
79+
ReferenceEquals(type, WellKnownTypes.UInt64) ? UInt64Accessor : null;
8080
}
8181

8282
ValueFieldAccessor ResolveByNullableType(Type type)
8383
{
8484
return ReferenceEquals(type, WellKnownTypes.NullableBool) ? BoolAccessor :
85-
ReferenceEquals(type, WellKnownTypes.NullableByte) ? ByteAccessor :
86-
ReferenceEquals(type, WellKnownTypes.NullableSByte) ? SByteAccessor :
87-
ReferenceEquals(type, WellKnownTypes.NullableInt16) ? Int16Accessor :
88-
ReferenceEquals(type, WellKnownTypes.NullableUInt16) ? UInt16Accessor :
8985
ReferenceEquals(type, WellKnownTypes.NullableInt32) ? Int32Accessor :
90-
ReferenceEquals(type, WellKnownTypes.NullableUInt32) ? UInt32Accessor :
91-
ReferenceEquals(type, WellKnownTypes.NullableInt64) ? Int64Accessor :
92-
ReferenceEquals(type, WellKnownTypes.NullableUInt64) ? UInt64Accessor :
93-
ReferenceEquals(type, WellKnownTypes.NullableSingle) ? SingleAccessor :
9486
ReferenceEquals(type, WellKnownTypes.NullableDouble) ? DoubleAccessor :
87+
ReferenceEquals(type, WellKnownTypes.NullableDecimal) ? DecimalAccessor :
88+
ReferenceEquals(type, WellKnownTypes.NullableInt64) ? Int64Accessor :
9589
ReferenceEquals(type, WellKnownTypes.NullableDateTime) ? DateTimeAccessor :
9690
ReferenceEquals(type, WellKnownTypes.NullableTimeSpan) ? TimeSpanAccessor :
97-
ReferenceEquals(type, WellKnownTypes.NullableDecimal) ? DecimalAccessor :
98-
ReferenceEquals(type, WellKnownTypes.NullableGuid) ? GuidAccessor :
99-
ReferenceEquals(type, WellKnownTypes.NullableDateTimeOffset) ? DateTimeOffsetAccessor : null;
91+
ReferenceEquals(type, WellKnownTypes.NullableDateTimeOffset) ? DateTimeOffsetAccessor :
92+
ReferenceEquals(type, WellKnownTypes.NullableSingle) ? SingleAccessor :
93+
ReferenceEquals(type, WellKnownTypes.NullableGuid) ? GuidAccessor :
94+
ReferenceEquals(type, WellKnownTypes.NullableInt16) ? Int16Accessor :
95+
ReferenceEquals(type, WellKnownTypes.NullableByte) ? ByteAccessor :
96+
ReferenceEquals(type, WellKnownTypes.NullableSByte) ? SByteAccessor :
97+
ReferenceEquals(type, WellKnownTypes.NullableUInt16) ? UInt16Accessor :
98+
ReferenceEquals(type, WellKnownTypes.NullableUInt32) ? UInt32Accessor :
99+
ReferenceEquals(type, WellKnownTypes.NullableUInt64) ? UInt64Accessor : null;
100100
}
101101
}
102102
}

0 commit comments

Comments
 (0)