Skip to content

Commit b371f69

Browse files
committed
perf: pool ghost download buffers without type collisions
1 parent 57067f3 commit b371f69

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

Ghosting/Playback/GhostRepository.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
extern alias BuffersAlias;
2+
13
using System;
24
using System.Collections.Generic;
35
using System.IO;
@@ -225,11 +227,18 @@ private static async Task<byte[]> ReadLimitedAsync(HttpContent content, Cancella
225227
{
226228
using Stream input = await content.ReadAsStreamAsync();
227229
using LimitedMemoryStream output = new(GhostLimits.MaxCompressedBytes);
228-
byte[] copyBuffer = new byte[81_920];
229-
int read;
230-
while ((read = await input.ReadAsync(copyBuffer, 0, copyBuffer.Length, cancellationToken)) > 0)
231-
output.Write(copyBuffer, 0, read);
232-
return output.ToArray();
230+
byte[] copyBuffer = BuffersAlias::System.Buffers.ArrayPool<byte>.Shared.Rent(81_920);
231+
try
232+
{
233+
int read;
234+
while ((read = await input.ReadAsync(copyBuffer, 0, copyBuffer.Length, cancellationToken)) > 0)
235+
output.Write(copyBuffer, 0, read);
236+
return output.ToArray();
237+
}
238+
finally
239+
{
240+
BuffersAlias::System.Buffers.ArrayPool<byte>.Shared.Return(copyBuffer);
241+
}
233242
}
234243

235244
private static string GetStorageKey(int recordId) => "ghosts/" + recordId;

Zeepkist.GTR.Mod.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" />
4646
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
4747
<PackageReference Include="StrawberryShake.Transport.Http" Version="14.3.0" />
48+
<PackageReference Include="System.Buffers" Version="4.6.1" Aliases="BuffersAlias" />
4849
<PackageReference Include="Zeepkist.GameLibs" Version="17.15.1867" PrivateAssets="all" />
4950
<PackageReference Include="ZeepSDK" Version="2.5.0" PrivateAssets="all" />
5051
</ItemGroup>

0 commit comments

Comments
 (0)