Skip to content

Commit 9e8a6b0

Browse files
committed
Thread static writers
1 parent fdd5d76 commit 9e8a6b0

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

src/BenchmarksApps/TechEmpower/Kestrel/BenchmarkApp.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.Buffers;
2+
using System.Diagnostics.CodeAnalysis;
3+
using System.Formats.Asn1;
24
using System.Text;
35
using System.Text.Json;
46
using System.Text.Json.Serialization;
@@ -128,26 +130,46 @@ private static async Task Json(IHttpResponseFeature res, IFeatureCollection feat
128130
//var bufferWriter = _bufferWriterPool.Get();
129131
//var jsonWriter = _jsonWriterPool.Get();
130132

131-
var bufferWriter = new ArrayBufferWriter<byte>(64);
132-
await using var jsonWriter = new Utf8JsonWriter(bufferWriter, new() { Indented = false, SkipValidation = true });
133+
//var bufferWriter = new ArrayBufferWriter<byte>(64);
134+
//await using var jsonWriter = new Utf8JsonWriter(bufferWriter, new() { Indented = false, SkipValidation = true });
133135

134136
//bufferWriter.ResetWrittenCount();
135137
//jsonWriter.Reset(bufferWriter);
136138

137-
JsonSerializer.Serialize(jsonWriter, new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage);
139+
//JsonSerializer.Serialize(jsonWriter, new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage);
138140

139-
res.Headers.ContentLength = bufferWriter.WrittenCount;
141+
var messageSpan = WriteMessage(new JsonMessage { message = "Hello, World!" });
142+
res.Headers.ContentLength = messageSpan.Length;
140143

141144
var body = features.GetResponseBodyFeature();
142145

146+
body.Writer.Write(messageSpan);
147+
143148
await body.StartAsync();
144-
body.Writer.Write(bufferWriter.WrittenSpan);
145149
await body.Writer.FlushAsync();
146150

147151
//_jsonWriterPool.Return(jsonWriter);
148152
//_bufferWriterPool.Return(bufferWriter);
149153
}
150154

155+
[ThreadStatic]
156+
private static ArrayBufferWriter<byte>? _bufferWriter;
157+
[ThreadStatic]
158+
private static Utf8JsonWriter? _jsonWriter;
159+
160+
private static ReadOnlySpan<byte> WriteMessage(JsonMessage message)
161+
{
162+
var bufferWriter = _bufferWriter ??= new(64);
163+
var jsonWriter = _jsonWriter ??= new(_bufferWriter, new() { Indented = false, SkipValidation = true });
164+
165+
bufferWriter.ResetWrittenCount();
166+
jsonWriter.Reset(bufferWriter);
167+
168+
JsonSerializer.Serialize(jsonWriter, new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage);
169+
170+
return bufferWriter.WrittenSpan;
171+
}
172+
151173
private struct JsonMessage
152174
{
153175
public required string message { get; set; }

0 commit comments

Comments
 (0)