File tree Expand file tree Collapse file tree
src/ImageSharp.Drawing/Shapes Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -245,9 +245,25 @@ public int FindIntersectionsWithOrientation(
245245 int position = 0 ;
246246 Vector2 lastPoint = MaxVector ;
247247
248- // TODO: This request can happen in huge numbers.
249- PassPointData [ ] precaclulate = ArrayPool < PassPointData > . Shared . Rent ( this . points . Length ) ;
250- Span < PassPointData > precaclulateSpan = precaclulate . AsSpan ( 0 , this . points . Length ) ;
248+ int max = this . points . Length ;
249+ Span < PassPointData > precaclulateSpan ;
250+ PassPointData [ ] precaclulate = null ;
251+
252+ // Avoid pool overhead for short numbers.
253+ // This method can be called in high volume.
254+ unsafe
255+ {
256+ if ( max < ( 1024 / sizeof ( PassPointData ) ) )
257+ {
258+ PassPointData * points = stackalloc PassPointData [ max ] ;
259+ precaclulateSpan = new Span < PassPointData > ( points , max ) ;
260+ }
261+ else
262+ {
263+ precaclulate = ArrayPool < PassPointData > . Shared . Rent ( max ) ;
264+ precaclulateSpan = precaclulate . AsSpan ( 0 , this . points . Length ) ;
265+ }
266+ }
251267
252268 try
253269 {
@@ -382,7 +398,10 @@ public int FindIntersectionsWithOrientation(
382398 }
383399 finally
384400 {
385- ArrayPool < PassPointData > . Shared . Return ( precaclulate ) ;
401+ if ( precaclulate != null )
402+ {
403+ ArrayPool < PassPointData > . Shared . Return ( precaclulate ) ;
404+ }
386405 }
387406 }
388407
You can’t perform that action at this time.
0 commit comments