|
1 | 1 | using System.Buffers;
|
| 2 | +using System.Diagnostics.CodeAnalysis; |
| 3 | +using System.Formats.Asn1; |
2 | 4 | using System.Text;
|
3 | 5 | using System.Text.Json;
|
4 | 6 | using System.Text.Json.Serialization;
|
@@ -128,26 +130,46 @@ private static async Task Json(IHttpResponseFeature res, IFeatureCollection feat
|
128 | 130 | //var bufferWriter = _bufferWriterPool.Get();
|
129 | 131 | //var jsonWriter = _jsonWriterPool.Get();
|
130 | 132 |
|
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 }); |
133 | 135 |
|
134 | 136 | //bufferWriter.ResetWrittenCount();
|
135 | 137 | //jsonWriter.Reset(bufferWriter);
|
136 | 138 |
|
137 |
| - JsonSerializer.Serialize(jsonWriter, new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage); |
| 139 | + //JsonSerializer.Serialize(jsonWriter, new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage); |
138 | 140 |
|
139 |
| - res.Headers.ContentLength = bufferWriter.WrittenCount; |
| 141 | + var messageSpan = WriteMessage(new JsonMessage { message = "Hello, World!" }); |
| 142 | + res.Headers.ContentLength = messageSpan.Length; |
140 | 143 |
|
141 | 144 | var body = features.GetResponseBodyFeature();
|
142 | 145 |
|
| 146 | + body.Writer.Write(messageSpan); |
| 147 | + |
143 | 148 | await body.StartAsync();
|
144 |
| - body.Writer.Write(bufferWriter.WrittenSpan); |
145 | 149 | await body.Writer.FlushAsync();
|
146 | 150 |
|
147 | 151 | //_jsonWriterPool.Return(jsonWriter);
|
148 | 152 | //_bufferWriterPool.Return(bufferWriter);
|
149 | 153 | }
|
150 | 154 |
|
| 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 | + |
151 | 173 | private struct JsonMessage
|
152 | 174 | {
|
153 | 175 | public required string message { get; set; }
|
|
0 commit comments