@@ -23,11 +23,10 @@ static IEnumerable<T[]> CombinationsCore<T>(IReadOnlyList<T> source, int length,
2323 if ( count == 1 ) yield break ;
2424 }
2525
26- var pool = ArrayPool < int > . Shared ;
27- var indexes = pool . Rent ( length ) ;
26+ var pool = count > 128 ? ArrayPool < int > . Shared : null ;
27+ var indexes = pool ? . Rent ( count ) ?? new int [ count ] ;
2828 try
2929 {
30-
3130 for ( var i = 0 ; i < length ; i ++ ) indexes [ i ] = 0 ;
3231
3332 var lastIndex = length - 1 ;
@@ -68,25 +67,25 @@ bool GetNext()
6867 }
6968 finally
7069 {
71- pool . Return ( indexes ) ;
70+ pool ? . Return ( indexes ) ;
7271 }
7372 }
7473
7574 static IEnumerable < T [ ] > CombinationsCore < T > ( IReadOnlyList < T > source , int length , bool distinctSet )
7675 {
77- var pool = ArrayPool < T > . Shared ;
78- var buffer = pool . Rent ( length ) ;
76+ var pool = length > 128 ? ArrayPool < T > . Shared : null ;
77+ var buffer = pool ? . Rent ( length ) ?? new T [ length ] ;
7978 try
8079 {
81- foreach ( var b in CombinationsCore ( source , length , distinctSet , buffer ) )
80+ foreach ( var b in CombinationsCore ( source , length , distinctSet , buffer ) )
8281 yield return b ;
8382 }
8483 finally
8584 {
86- pool . Return ( buffer , true ) ;
85+ pool ? . Return ( buffer , true ) ;
8786 }
8887 }
89-
88+
9089
9190 /// <inheritdoc cref="Combinations{T}(IEnumerable{T}, int)"/>
9291 /// <param name="buffer">A buffer that is filled with the values and returned as the yielded value instead of a new array.</param>
@@ -134,7 +133,7 @@ public static IEnumerable<T[]> Combinations<T>(this IEnumerable<T> elements, int
134133 if ( count == 0 ) return Enumerable . Empty < T [ ] > ( ) ;
135134
136135 if ( uniqueOnly ) return source . Subsets ( length ) ;
137- return uniqueOnly ? source . Subsets ( length ) : CombinationsCore ( source , length , true ) . Select ( e=> e . AsCopy ( length ) ) ;
136+ return uniqueOnly ? source . Subsets ( length ) : CombinationsCore ( source , length , true ) . Select ( e => e . AsCopy ( length ) ) ;
138137 }
139138
140139 /// <inheritdoc cref="Combinations{T}(IEnumerable{T}, int)"/>
@@ -150,8 +149,8 @@ public static IEnumerable<ReadOnlyMemory<T>> CombinationsBuffered<T>(this IEnume
150149
151150 if ( length == 0 ) yield break ;
152151
153- var pool = ArrayPool < T > . Shared ;
154- var buffer = pool . Rent ( length ) ;
152+ var pool = length > 128 ? ArrayPool < T > . Shared : null ;
153+ var buffer = pool ? . Rent ( length ) ?? new T [ length ] ;
155154 var readBuffer = new ReadOnlyMemory < T > ( buffer , 0 , length ) ;
156155 try
157156 {
@@ -160,7 +159,7 @@ public static IEnumerable<ReadOnlyMemory<T>> CombinationsBuffered<T>(this IEnume
160159 }
161160 finally
162161 {
163- pool . Return ( buffer , true ) ;
162+ pool ? . Return ( buffer , true ) ;
164163 }
165164 }
166165
@@ -178,8 +177,8 @@ public static IEnumerable<ReadOnlyMemory<T>> CombinationsDistinctBuffered<T>(thi
178177
179178 if ( length == 0 ) yield break ;
180179
181- var pool = ArrayPool < T > . Shared ;
182- var buffer = pool . Rent ( length ) ;
180+ var pool = length > 128 ? ArrayPool < T > . Shared : null ;
181+ var buffer = pool ? . Rent ( length ) ?? new T [ length ] ;
183182 var readBuffer = new ReadOnlyMemory < T > ( buffer , 0 , length ) ;
184183 try
185184 {
@@ -188,7 +187,7 @@ public static IEnumerable<ReadOnlyMemory<T>> CombinationsDistinctBuffered<T>(thi
188187 }
189188 finally
190189 {
191- pool . Return ( buffer , true ) ;
190+ pool ? . Return ( buffer , true ) ;
192191 }
193192 }
194193
0 commit comments