-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStringArraySerialisation.cs
More file actions
66 lines (57 loc) · 1.72 KB
/
Copy pathStringArraySerialisation.cs
File metadata and controls
66 lines (57 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System.Text.Json;
using BenchmarkDotNet.Attributes;
using Google.Protobuf;
using Dto = Greeter.Common.StringArray;
using Proto = Greeter.Common.Grpc.StringArray;
using NullableDto = Greeter.Common.NullableStringArray;
using NullableProto = Greeter.Common.Grpc.NullableStringArray;
[MemoryDiagnoser]
[RPlotExporter]
public class StringArraySerialisation
{
private Dto Dto;
private NullableDto NullableDto;
private MemoryStream Stream = new();
private CodedOutputStream ProtoStream;
public StringArraySerialisation()
{
ProtoStream = new(Stream);
}
[Params(1, 10, 100)]
public int Size { get; set; }
[GlobalSetup]
public void Setup()
{
Dto = new Dto
{
Items = Enumerable.Range(0, Size).Select(i => new string((char)(i + ' '), i)).ToArray()
};
NullableDto = new NullableDto
{
Items = Enumerable.Range(0, Size - 1).Select(i => new string((char)(i + ' '), i)).Prepend(null).ToArray()
};
}
[Benchmark(Description = "string[] → byte[]")]
[BenchmarkCategory("ToBinary")]
public void ArrayToBinary()
{
((Proto)Dto).WriteTo(ProtoStream);
ProtoStream.Flush();
Stream.Position = 0;
}
[Benchmark(Description = "string?[] → byte[]")]
[BenchmarkCategory("ToBinary")]
public void NullableArrayToBinary()
{
((NullableProto)NullableDto).WriteTo(ProtoStream);
ProtoStream.Flush();
Stream.Position = 0;
}
[Benchmark(Description = "string?[] → JSON", Baseline = true)]
[BenchmarkCategory("ToBinary")]
public void NullableArrayToJson()
{
JsonSerializer.Serialize(Stream, NullableDto);
Stream.Position = 0;
}
}