From 398b23f3682baf0fc487ae11a527e64afec9af39 Mon Sep 17 00:00:00 2001 From: Rima Falko Date: Mon, 8 Jun 2026 01:30:02 +0200 Subject: [PATCH 1/2] Optimize TypeElementCompiler --- .../Compilers/TypeElementCompiler.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs b/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs index c27d3f6..61eac76 100644 --- a/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs +++ b/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs @@ -10,6 +10,9 @@ internal sealed class TypeElementCompiler : IElementCompiler { private const int MinimumTypeLength = 64; // average type name length + private static readonly int LeftRightAngleBracketsLength + = CSharpLanguageConstants.LeftAngleBracket.Length + CSharpLanguageConstants.RightAngleBracket.Length; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Compile ( @@ -36,20 +39,20 @@ scoped in TypeElement element var genericTypes = element.GenericTypes; StructArgumentException.ThrowIfDefault(genericTypes, nameof(element.GenericTypes)); - var leftAngleBracket = CSharpLanguageConstants.LeftAngleBracket; - var rightAngleBracket = CSharpLanguageConstants.RightAngleBracket; var dot = CSharpLanguageConstants.Dot; var commaSpace = CSharpLanguageConstants.CommaSpace; var hasTypeNamespace = typeNamespace.IsEmpty is false; var dotBetweenLength = hasTypeNamespace ? dot.Length : 0; - var typeLength = typeNamespace.Length + typeName.Length + dotBetweenLength; + var typeLength = checked(typeNamespace.Length + typeName.Length + dotBetweenLength); var genericTypesCount = genericTypes.Length; - if (genericTypesCount is not 0) + var hasGenericTypes = genericTypesCount is not 0; + + if (hasGenericTypes) { - typeLength += leftAngleBracket.Length + rightAngleBracket.Length; // for generic type brackets + typeLength += LeftRightAngleBracketsLength; // for generic type brackets typeLength += checked(MinimumTypeLength * genericTypesCount); // for do fewer allocations when appending generic types typeLength += commaSpace.Length * (genericTypesCount - 1); // for comma and space between generic types } @@ -64,9 +67,9 @@ scoped in TypeElement element buffer.Append(typeName); - if (genericTypesCount is 0) return; + if (hasGenericTypes is false) return; - buffer.Append(leftAngleBracket); + buffer.Append(CSharpLanguageConstants.LeftAngleBracket); var genericTypesSpan = genericTypes.AsSpan(); var genericTypeIndex = 0; @@ -85,6 +88,6 @@ scoped in TypeElement element goto genericTypeAppendLoop; } - buffer.Append(rightAngleBracket); + buffer.Append(CSharpLanguageConstants.RightAngleBracket); } } From 984d3c03880f2ab8b356bd7136b8be9d46776079 Mon Sep 17 00:00:00 2001 From: Rima Falko Date: Mon, 8 Jun 2026 01:35:51 +0200 Subject: [PATCH 2/2] we are dont need to use checked cuz allocate is contains checked, its importand to check only if value can be less to 0 and affect math operations --- Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs b/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs index 61eac76..ff7df8d 100644 --- a/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs +++ b/Sources/Falko.Foundry.CSharp/Compilers/TypeElementCompiler.cs @@ -45,7 +45,7 @@ scoped in TypeElement element var hasTypeNamespace = typeNamespace.IsEmpty is false; var dotBetweenLength = hasTypeNamespace ? dot.Length : 0; - var typeLength = checked(typeNamespace.Length + typeName.Length + dotBetweenLength); + var typeLength = typeNamespace.Length + typeName.Length + dotBetweenLength; var genericTypesCount = genericTypes.Length; var hasGenericTypes = genericTypesCount is not 0; @@ -53,7 +53,7 @@ scoped in TypeElement element if (hasGenericTypes) { typeLength += LeftRightAngleBracketsLength; // for generic type brackets - typeLength += checked(MinimumTypeLength * genericTypesCount); // for do fewer allocations when appending generic types + typeLength += MinimumTypeLength * genericTypesCount; // for do fewer allocations when appending generic types typeLength += commaSpace.Length * (genericTypesCount - 1); // for comma and space between generic types }