Performance code quality
Recipe ID
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.PerformanceCodeQualityArtifactOpenRewrite.Recipes.CSharp.CodeQualityPerformance optimization recipes for C# code.
Composite recipecsharpperformancecode-qualityProprietary
Usage
This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.
mod run . --recipe OpenRewrite.Recipes.CSharp.CodeQuality.Performance.PerformanceCodeQualityIf the recipe isn’t available locally, install it with:
mod config recipes nuget install OpenRewrite.Recipes.CSharp.CodeQualityDefinition
This recipe runs the following recipes in order.
- Avoid boxing of value type
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.AvoidBoxingOfValueType - Use StringComparison
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseStringComparison - Avoid locking on publicly accessible instance
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.AvoidLockingOnPubliclyAccessible - Use StringBuilder.AppendLine
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseStringBuilderAppendLine - Use Array.Empty<T>() instead of new T[0]
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseArrayEmpty - Return completed task instead of null
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.ReturnCompletedTask - Use Count/Length property instead of Count()
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseCountProperty - Use Regex.IsMatch
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseRegexIsMatch - Use string.Concat instead of string.Join
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseStringConcatInsteadOfJoin - Bitwise operation on enum without Flags attribute
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.BitOperationOnEnumWithoutFlags - Make parameter ref read-only
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.MakeParameterRefReadOnly - Avoid NullReferenceException
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.AvoidNullReferenceException - Remove unnecessary explicit enumerator
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UnnecessaryExplicitEnumerator - Throwing of new NotImplementedException
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.ThrowingNotImplementedException - Optimize method call
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.OptimizeMethodCall - Do not pass non-read-only struct by read-only reference
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.DoNotPassNonReadOnlyStructByReadOnlyRef - Replace Enum.ToString() with nameof
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.ReplaceEnumToStringWithNameof - Optimize StringBuilder.Append usage
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.OptimizeStringBuilderAppend - Find blocking calls in async methods
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindBlockingCallsInAsync - Find methods not forwarding CancellationToken
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindMissingCancellationToken - Find implicit culture-sensitive string methods
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindImplicitCultureSensitiveMethods - Find implicit culture-sensitive ToString calls
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindImplicitCultureSensitiveToString - Find LINQ methods replaceable with direct methods
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindLinqOnDirectMethods - Find missing WithCancellation on async enumerables
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindMissingWithCancellation - Do not use async void
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindAsyncVoid - Do not use NaN in comparisons
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindNaNComparison - Add timeout to Regex
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindMissingTimeoutForRegex - Do not use blocking calls on tasks
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindDoNotUseBlockingCall - Use ContainsKey instead of TryGetValue with discard
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseContainsKeyInsteadOfTryGetValue - String.Format format string should be constant
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindStringFormatShouldBeConstant - Avoid closure when using ConcurrentDictionary
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindAvoidClosureInConcurrentDictionary - Use RegexOptions.ExplicitCapture
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseExplicitCaptureRegexOption - Do not use ToString on GetType result
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindDoNotUseToStringIfObject - Find EqualityComparer<string>.Default usage
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindEqualityComparerDefaultOfString - Find string.GetHashCode() without StringComparer
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindStringGetHashCode - Use char overload for single-character string methods
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindOptimizeStartsWith - Find Regex that could use source generator
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseRegexSourceGenerator - Find FormattableString that could use string.Create
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindStringCreateInsteadOfFormattable - Find GetCustomAttributes that could use Attribute.IsDefined
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseAttributeIsDefined - Find Span<char> equality that should use SequenceEqual
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindSequenceEqualForSpan - Find structs without StructLayout attribute
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindMissingStructLayout - Find methods that could be static
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindMakeMethodStatic - Find Guid.Parse with constant string
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindOptimizeGuidCreation - Find calls that could use TimeProvider
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseTimeProviderOverload - Find simplifiable string.Create calls
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindSimplifyStringCreate - Find closure in GetOrAdd that could use factory argument
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindAvoidClosureByUsingFactoryArg - Find GetType() called on System.Type
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindGetTypeOnSystemType - Find LINQ Count() on materialized collection
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindOptimizeEnumerableCountVsAny - Find unused Stream.Read return value
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindStreamReadResultNotUsed - Find Dictionary/HashSet with struct key type
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindStructWithDefaultEqualsAsKey - Find LINQ methods replaceable with indexer
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseIndexerInsteadOfLinq - Use ContainsKey instead of Keys.Contains
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.UseContainsKey - Find Values.Contains() instead of ContainsValue()
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindUseValuesContainsInsteadOfValues - Find closure in GetOrAdd/AddOrUpdate factory
OpenRewrite.Recipes.CSharp.CodeQuality.Performance.FindAvoidClosureInMethod