Skip to content

Commit 7c3269a

Browse files
committed
Minor performance improvement
1 parent b93f42f commit 7c3269a

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

Microsoft.Toolkit.HighPerformance/Extensions/IBufferWriterExtensions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.IO;
99
using System.Runtime.CompilerServices;
1010
using System.Runtime.InteropServices;
11+
using Microsoft.Toolkit.HighPerformance.Buffers;
1112
using Microsoft.Toolkit.HighPerformance.Streams;
1213
using Microsoft.Toolkit.HighPerformance.Streams.Sources;
1314

@@ -28,6 +29,15 @@ public static class IBufferWriterExtensions
2829
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2930
public static Stream AsStream(this IBufferWriter<byte> writer)
3031
{
32+
if (writer.GetType() == typeof(ArrayPoolBufferWriter<byte>))
33+
{
34+
// If the input writer is of type ArrayPoolBufferWriter<byte>, we can use the type
35+
// specific buffer writer owner to let the JIT elide callvirts when accessing it.
36+
var internalWriter = Unsafe.As<ArrayPoolBufferWriter<byte>>(writer);
37+
38+
return new IBufferWriterStream<ArrayBufferWriterOwner>(new ArrayBufferWriterOwner(internalWriter));
39+
}
40+
3141
return new IBufferWriterStream<IBufferWriterOwner>(new IBufferWriterOwner(writer));
3242
}
3343

0 commit comments

Comments
 (0)