From 74d40e40a920217325b9fbd5b21bc1a8fb79aad2 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Tue, 31 Mar 2026 11:07:08 +0100 Subject: [PATCH] Optimization for the disk store string writing to avoid memory allocations (#466) --- src/Speckle.Sdk/Api/GraphQL/Client.cs | 4 ++-- src/Speckle.Sdk/Pipelines/Send/DiskStore.cs | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Speckle.Sdk/Api/GraphQL/Client.cs b/src/Speckle.Sdk/Api/GraphQL/Client.cs index e53064be..dc66df02 100644 --- a/src/Speckle.Sdk/Api/GraphQL/Client.cs +++ b/src/Speckle.Sdk/Api/GraphQL/Client.cs @@ -154,10 +154,10 @@ public sealed class Client : ISpeckleGraphQLClient, IClient activity?.SetStatus(SdkActivityStatusCode.Ok); return ret; } - catch (Exception) + catch (Exception ex) { activity?.SetStatus(SdkActivityStatusCode.Error); - // Don't record exception as it's rethrown. + activity?.RecordException(ex); throw; } } diff --git a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs index 88443633..172de132 100644 --- a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs +++ b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs @@ -65,7 +65,12 @@ public sealed class DiskStore await foreach (var item in _channel.ReadAllAsync(_cancellationToken).ConfigureAwait(false)) { - await writer.WriteLineAsync($"{item.Id}\t{item.SpeckleType}\t{item.Json}").ConfigureAwait(false); + await writer.WriteAsync(item.Id).ConfigureAwait(false); + await writer.WriteAsync('\t').ConfigureAwait(false); + await writer.WriteAsync(item.SpeckleType).ConfigureAwait(false); + await writer.WriteAsync('\t').ConfigureAwait(false); + await writer.WriteAsync(item.Json.Value).ConfigureAwait(false); + await writer.WriteLineAsync().ConfigureAwait(false); } #if NET8_0_OR_GREATER await writer.FlushAsync(_cancellationToken).ConfigureAwait(false);