Skip to content

Commit be2d273

Browse files
Match the benchmark file names with the class names (#9633)
* Match the file names with the class names * Update ArrayDeserializeBenchmark.cs * Update ArraySerializeBenchmark.cs --------- Co-authored-by: Reuben Bond <203839+ReubenBond@users.noreply.github.com>
1 parent ef84ff1 commit be2d273

File tree

2 files changed

+153
-153
lines changed

2 files changed

+153
-153
lines changed
Lines changed: 24 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Buffers;
2-
using System.IO.Pipelines;
32
using System.Text;
43
using System.Text.Json;
54
using BenchmarkDotNet.Attributes;
@@ -9,158 +8,54 @@
98
using MessagePack;
109
using Microsoft.Extensions.DependencyInjection;
1110
using Orleans.Serialization;
12-
using Orleans.Serialization.Buffers;
13-
using Orleans.Serialization.Session;
14-
using Xunit;
1511

1612
namespace Benchmarks.Serialization.Comparison;
1713

14+
#pragma warning disable IDE1006 // Naming Styles
1815
/// <summary>
19-
/// Compares Orleans serialization performance against other popular serializers for array types.
16+
/// Compares Orleans deserialization performance against other popular serializers for array types.
2017
/// </summary>
2118
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
2219
[Config(typeof(BenchmarkConfig))]
2320
[BenchmarkCategory("Serialization")]
24-
public class ArraySerializeBenchmark
21+
public class ArrayDeserializeBenchmark
2522
{
2623
private static readonly MyVector3[] _value;
2724
private static readonly Serializer<MyVector3[]> _orleansSerializer;
28-
private static readonly SerializerSession _session;
29-
private static readonly ArrayBufferWriter<byte> _arrayBufferWriter;
30-
private static readonly Utf8JsonWriter _jsonWriter;
31-
private static readonly MemoryStream _stream;
32-
private static readonly Pipe _pipe;
25+
private static readonly byte[] _stjPayload;
26+
private static readonly byte[] _protobufPayload;
27+
private static readonly byte[] _orleansPayload;
28+
private static readonly byte[] _messagePackPayload;
3329

34-
static ArraySerializeBenchmark()
30+
static ArrayDeserializeBenchmark()
3531
{
3632
_value = Enumerable.Repeat(new MyVector3 { X = 10.3f, Y = 40.5f, Z = 13411.3f }, 1000).ToArray();
3733
var serviceProvider = new ServiceCollection()
38-
.AddSerializer(builder => builder.AddAssembly(typeof(ArraySerializeBenchmark).Assembly))
34+
.AddSerializer()
3935
.BuildServiceProvider();
4036
_orleansSerializer = serviceProvider.GetRequiredService<Serializer<MyVector3[]>>();
41-
_session = serviceProvider.GetRequiredService<SerializerSessionPool>().GetSession();
4237

43-
// create buffers
44-
_stream = new MemoryStream();
4538

46-
var serialize1 = _orleansSerializer.SerializeToArray(_value);
47-
var serialize2 = MessagePackSerializer.Serialize(_value);
48-
ProtoBuf.Serializer.Serialize(_stream, _value);
49-
var serialize3 = _stream.ToArray();
50-
_stream.Position = 0;
51-
var serialize4 = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(_value));
39+
_orleansPayload = _orleansSerializer.SerializeToArray(_value);
40+
_messagePackPayload = MessagePackSerializer.Serialize(_value);
5241

53-
_arrayBufferWriter = new ArrayBufferWriter<byte>(new[] { serialize1, serialize2, serialize3, serialize4 }.Max(x => x.Length));
54-
_jsonWriter = new Utf8JsonWriter(_arrayBufferWriter);
55-
56-
_pipe = new Pipe(new PipeOptions(readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, pauseWriterThreshold: 0));
57-
}
58-
59-
// return byte[]
60-
61-
[Benchmark(Baseline = true), BenchmarkCategory(" byte[]")]
62-
public byte[] MessagePackSerialize()
63-
{
64-
return MessagePackSerializer.Serialize(_value);
42+
var stream = new MemoryStream();
43+
ProtoBuf.Serializer.Serialize(stream, _value);
44+
stream.Position = 0;
45+
_protobufPayload = stream.ToArray();
46+
_stjPayload = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(_value));
6547
}
6648

67-
[Benchmark, BenchmarkCategory(" byte[]")]
68-
public byte[] ProtobufNetSerialize()
69-
{
70-
ProtoBuf.Serializer.Serialize(_stream, _value);
71-
var array = _stream.ToArray();
72-
_stream.Position = 0;
73-
return array;
74-
}
75-
76-
[Benchmark, BenchmarkCategory(" byte[]")]
77-
public byte[] SystemTextJsonSerialize()
78-
{
79-
JsonSerializer.Serialize(_stream, _value);
80-
var array = _stream.ToArray();
81-
_stream.Position = 0;
82-
return array;
83-
}
84-
85-
[Benchmark, BenchmarkCategory(" byte[]")]
86-
public byte[] OrleansSerialize()
87-
{
88-
return _orleansSerializer.SerializeToArray(_value);
89-
}
90-
91-
// use BufferWriter
92-
93-
[Fact]
94-
[Benchmark(Baseline = true), BenchmarkCategory("BufferWriter")]
95-
public void MessagePackBufferWriter()
96-
{
97-
MessagePackSerializer.Serialize(_arrayBufferWriter, _value);
98-
_arrayBufferWriter.Clear();
99-
}
49+
[Benchmark(Baseline = true)]
50+
public MyVector3[] MessagePackDeserialize() => MessagePackSerializer.Deserialize<MyVector3[]>(_messagePackPayload);
10051

101-
[Fact]
102-
[Benchmark, BenchmarkCategory("BufferWriter")]
103-
public void ProtobufNetBufferWriter()
104-
{
105-
ProtoBuf.Serializer.Serialize(_arrayBufferWriter, _value);
106-
_arrayBufferWriter.Clear();
107-
}
108-
109-
[Fact]
110-
[Benchmark, BenchmarkCategory("BufferWriter")]
111-
public void SystemTextJsonBufferWriter()
112-
{
113-
JsonSerializer.Serialize(_jsonWriter, _value);
114-
_jsonWriter.Flush();
115-
_arrayBufferWriter.Clear();
116-
_jsonWriter.Reset(_arrayBufferWriter);
117-
}
118-
119-
[Fact]
120-
[Benchmark, BenchmarkCategory("BufferWriter")]
121-
public void OrleansBufferWriter()
122-
{
123-
var writer = Writer.CreatePooled(_session);
124-
try
125-
{
126-
_orleansSerializer.Serialize(_value, ref writer);
127-
}
128-
finally
129-
{
130-
writer.Dispose();
131-
_session.Reset();
132-
}
133-
}
134-
135-
[Fact]
136-
[Benchmark, BenchmarkCategory("BufferWriter")]
137-
public void OrleansBufferWriter2()
138-
{
139-
// wrap ArrayBufferWriter<byte>
140-
var writer = _arrayBufferWriter.CreateWriter(_session);
141-
try
142-
{
143-
_orleansSerializer.Serialize(_value, ref writer);
144-
}
145-
finally
146-
{
147-
writer.Dispose();
148-
_session.Reset();
149-
}
150-
151-
_arrayBufferWriter.Clear(); // clear ArrayBufferWriter<byte>
152-
}
52+
[Benchmark]
53+
public MyVector3[] ProtobufNetDeserialize() => ProtoBuf.Serializer.Deserialize<MyVector3[]>(_protobufPayload.AsSpan());
15354

154-
[Fact]
15555
[Benchmark]
156-
public void OrleansPipeWriter()
157-
{
158-
var writer = _pipe.Writer.CreateWriter(_session);
159-
_orleansSerializer.Serialize(_value, ref writer);
160-
_session.Reset();
56+
public MyVector3[] SystemTextJsonDeserialize() => JsonSerializer.Deserialize<MyVector3[]>(_stjPayload);
16157

162-
_pipe.Writer.Complete();
163-
_pipe.Reader.Complete();
164-
_pipe.Reset();
165-
}
58+
[Benchmark]
59+
public MyVector3[] OrleansDeserialize() => _orleansSerializer.Deserialize(_orleansPayload);
16660
}
61+
#pragma warning restore IDE1006 // Naming Styles

test/Benchmarks/Serialization/Comparison/ArraySerializeBenchmark.cs

Lines changed: 129 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Buffers;
2+
using System.IO.Pipelines;
23
using System.Text;
34
using System.Text.Json;
45
using BenchmarkDotNet.Attributes;
@@ -8,54 +9,158 @@
89
using MessagePack;
910
using Microsoft.Extensions.DependencyInjection;
1011
using Orleans.Serialization;
12+
using Orleans.Serialization.Buffers;
13+
using Orleans.Serialization.Session;
14+
using Xunit;
1115

1216
namespace Benchmarks.Serialization.Comparison;
1317

14-
#pragma warning disable IDE1006 // Naming Styles
1518
/// <summary>
16-
/// Compares Orleans deserialization performance against other popular serializers for array types.
19+
/// Compares Orleans serialization performance against other popular serializers for array types.
1720
/// </summary>
1821
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
1922
[Config(typeof(BenchmarkConfig))]
2023
[BenchmarkCategory("Serialization")]
21-
public class ArrayDeserializeBenchmark
24+
public class ArraySerializeBenchmark
2225
{
2326
private static readonly MyVector3[] _value;
2427
private static readonly Serializer<MyVector3[]> _orleansSerializer;
25-
private static readonly byte[] _stjPayload;
26-
private static readonly byte[] _protobufPayload;
27-
private static readonly byte[] _orleansPayload;
28-
private static readonly byte[] _messagePackPayload;
28+
private static readonly SerializerSession _session;
29+
private static readonly ArrayBufferWriter<byte> _arrayBufferWriter;
30+
private static readonly Utf8JsonWriter _jsonWriter;
31+
private static readonly MemoryStream _stream;
32+
private static readonly Pipe _pipe;
2933

30-
static ArrayDeserializeBenchmark()
34+
static ArraySerializeBenchmark()
3135
{
3236
_value = Enumerable.Repeat(new MyVector3 { X = 10.3f, Y = 40.5f, Z = 13411.3f }, 1000).ToArray();
3337
var serviceProvider = new ServiceCollection()
34-
.AddSerializer(builder => builder.AddAssembly(typeof(ArraySerializeBenchmark).Assembly))
38+
.AddSerializer()
3539
.BuildServiceProvider();
3640
_orleansSerializer = serviceProvider.GetRequiredService<Serializer<MyVector3[]>>();
41+
_session = serviceProvider.GetRequiredService<SerializerSessionPool>().GetSession();
3742

43+
// create buffers
44+
_stream = new MemoryStream();
3845

39-
_orleansPayload = _orleansSerializer.SerializeToArray(_value);
40-
_messagePackPayload = MessagePackSerializer.Serialize(_value);
46+
var serialize1 = _orleansSerializer.SerializeToArray(_value);
47+
var serialize2 = MessagePackSerializer.Serialize(_value);
48+
ProtoBuf.Serializer.Serialize(_stream, _value);
49+
var serialize3 = _stream.ToArray();
50+
_stream.Position = 0;
51+
var serialize4 = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(_value));
4152

42-
var stream = new MemoryStream();
43-
ProtoBuf.Serializer.Serialize(stream, _value);
44-
stream.Position = 0;
45-
_protobufPayload = stream.ToArray();
46-
_stjPayload = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(_value));
53+
_arrayBufferWriter = new ArrayBufferWriter<byte>(new[] { serialize1, serialize2, serialize3, serialize4 }.Max(x => x.Length));
54+
_jsonWriter = new Utf8JsonWriter(_arrayBufferWriter);
55+
56+
_pipe = new Pipe(new PipeOptions(readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, pauseWriterThreshold: 0));
4757
}
4858

49-
[Benchmark(Baseline = true)]
50-
public MyVector3[] MessagePackDeserialize() => MessagePackSerializer.Deserialize<MyVector3[]>(_messagePackPayload);
59+
// return byte[]
5160

52-
[Benchmark]
53-
public MyVector3[] ProtobufNetDeserialize() => ProtoBuf.Serializer.Deserialize<MyVector3[]>(_protobufPayload.AsSpan());
61+
[Benchmark(Baseline = true), BenchmarkCategory(" byte[]")]
62+
public byte[] MessagePackSerialize()
63+
{
64+
return MessagePackSerializer.Serialize(_value);
65+
}
5466

55-
[Benchmark]
56-
public MyVector3[] SystemTextJsonDeserialize() => JsonSerializer.Deserialize<MyVector3[]>(_stjPayload);
67+
[Benchmark, BenchmarkCategory(" byte[]")]
68+
public byte[] ProtobufNetSerialize()
69+
{
70+
ProtoBuf.Serializer.Serialize(_stream, _value);
71+
var array = _stream.ToArray();
72+
_stream.Position = 0;
73+
return array;
74+
}
75+
76+
[Benchmark, BenchmarkCategory(" byte[]")]
77+
public byte[] SystemTextJsonSerialize()
78+
{
79+
JsonSerializer.Serialize(_stream, _value);
80+
var array = _stream.ToArray();
81+
_stream.Position = 0;
82+
return array;
83+
}
84+
85+
[Benchmark, BenchmarkCategory(" byte[]")]
86+
public byte[] OrleansSerialize()
87+
{
88+
return _orleansSerializer.SerializeToArray(_value);
89+
}
90+
91+
// use BufferWriter
92+
93+
[Fact]
94+
[Benchmark(Baseline = true), BenchmarkCategory("BufferWriter")]
95+
public void MessagePackBufferWriter()
96+
{
97+
MessagePackSerializer.Serialize(_arrayBufferWriter, _value);
98+
_arrayBufferWriter.Clear();
99+
}
57100

101+
[Fact]
102+
[Benchmark, BenchmarkCategory("BufferWriter")]
103+
public void ProtobufNetBufferWriter()
104+
{
105+
ProtoBuf.Serializer.Serialize(_arrayBufferWriter, _value);
106+
_arrayBufferWriter.Clear();
107+
}
108+
109+
[Fact]
110+
[Benchmark, BenchmarkCategory("BufferWriter")]
111+
public void SystemTextJsonBufferWriter()
112+
{
113+
JsonSerializer.Serialize(_jsonWriter, _value);
114+
_jsonWriter.Flush();
115+
_arrayBufferWriter.Clear();
116+
_jsonWriter.Reset(_arrayBufferWriter);
117+
}
118+
119+
[Fact]
120+
[Benchmark, BenchmarkCategory("BufferWriter")]
121+
public void OrleansBufferWriter()
122+
{
123+
var writer = Writer.CreatePooled(_session);
124+
try
125+
{
126+
_orleansSerializer.Serialize(_value, ref writer);
127+
}
128+
finally
129+
{
130+
writer.Dispose();
131+
_session.Reset();
132+
}
133+
}
134+
135+
[Fact]
136+
[Benchmark, BenchmarkCategory("BufferWriter")]
137+
public void OrleansBufferWriter2()
138+
{
139+
// wrap ArrayBufferWriter<byte>
140+
var writer = _arrayBufferWriter.CreateWriter(_session);
141+
try
142+
{
143+
_orleansSerializer.Serialize(_value, ref writer);
144+
}
145+
finally
146+
{
147+
writer.Dispose();
148+
_session.Reset();
149+
}
150+
151+
_arrayBufferWriter.Clear(); // clear ArrayBufferWriter<byte>
152+
}
153+
154+
[Fact]
58155
[Benchmark]
59-
public MyVector3[] OrleansDeserialize() => _orleansSerializer.Deserialize(_orleansPayload);
156+
public void OrleansPipeWriter()
157+
{
158+
var writer = _pipe.Writer.CreateWriter(_session);
159+
_orleansSerializer.Serialize(_value, ref writer);
160+
_session.Reset();
161+
162+
_pipe.Writer.Complete();
163+
_pipe.Reader.Complete();
164+
_pipe.Reset();
165+
}
60166
}
61-
#pragma warning restore IDE1006 // Naming Styles

0 commit comments

Comments
 (0)