From b910f176453cdfc0f1a5ab9f3abebf9aa48643b1 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Tue, 12 May 2026 16:36:54 -0700 Subject: [PATCH 1/2] Optimize `ExpressionMaterializer.CreateEntity()` --- .../Orm/Linq/Materialization/ExpressionMaterializer.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs index bf0f5b2c2..f360f2f90 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs @@ -6,6 +6,7 @@ using System.Linq.Expressions; using System.Reflection; +using System.Runtime.InteropServices; using Xtensive.Core; using Xtensive.Linq; using Xtensive.Orm.Internals; @@ -384,9 +385,9 @@ internal protected override Expression VisitEntityExpression(EntityExpression ex /// Unable to materialize Entity. private Expression CreateEntity(IEntityExpression expression, Expression tupleExpression) { - if (!entityRegistry.TryGetValue(expression, out var index)) { - index = entityRegistry.Count; - entityRegistry.Add(expression, index); + ref var index = ref CollectionsMarshal.GetValueRefOrAddDefault(entityRegistry, expression, out var exists); + if (!exists) { + index = entityRegistry.Count - 1; } if (itemMaterializationContextParameter==null) From e38ef1def8eb6e270b4229b4d3497e634ef1985f Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Tue, 12 May 2026 16:39:56 -0700 Subject: [PATCH 2/2] Simplify --- .../Orm/Linq/Materialization/ExpressionMaterializer.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs index f360f2f90..6385c83b3 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs @@ -385,10 +385,8 @@ internal protected override Expression VisitEntityExpression(EntityExpression ex /// Unable to materialize Entity. private Expression CreateEntity(IEntityExpression expression, Expression tupleExpression) { - ref var index = ref CollectionsMarshal.GetValueRefOrAddDefault(entityRegistry, expression, out var exists); - if (!exists) { - index = entityRegistry.Count - 1; - } + ref var indexRef = ref CollectionsMarshal.GetValueRefOrAddDefault(entityRegistry, expression, out var exists); + var index = exists ? indexRef : (indexRef = entityRegistry.Count - 1); if (itemMaterializationContextParameter==null) throw new InvalidOperationException(