|
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