Skip to content

Commit b3e7a14

Browse files
Merge pull request #936 from bollhals/useSpanDirectly
Use span directly instead of reader / writer for methods & properties
2 parents 9dd3878 + 8a4b3f7 commit b3e7a14

File tree

95 files changed

+1438
-1510
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+1438
-1510
lines changed

RabbitMQDotNetClient.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RabbitMQ.Client", "projects
1212
EndProject
1313
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unit", "projects\Unit\Unit.csproj", "{B8FAC024-CC03-4067-9FFC-02846FB8AE48}"
1414
EndProject
15+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmarks", "projects\Benchmarks\Benchmarks.csproj", "{38D72C9A-68E9-4653-B0CE-C7BA9FFD91D0}"
16+
EndProject
1517
Global
1618
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1719
Debug|Any CPU = Debug|Any CPU
@@ -26,6 +28,10 @@ Global
2628
{B8FAC024-CC03-4067-9FFC-02846FB8AE48}.Debug|Any CPU.Build.0 = Debug|Any CPU
2729
{B8FAC024-CC03-4067-9FFC-02846FB8AE48}.Release|Any CPU.ActiveCfg = Release|Any CPU
2830
{B8FAC024-CC03-4067-9FFC-02846FB8AE48}.Release|Any CPU.Build.0 = Release|Any CPU
31+
{38D72C9A-68E9-4653-B0CE-C7BA9FFD91D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32+
{38D72C9A-68E9-4653-B0CE-C7BA9FFD91D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
33+
{38D72C9A-68E9-4653-B0CE-C7BA9FFD91D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
34+
{38D72C9A-68E9-4653-B0CE-C7BA9FFD91D0}.Release|Any CPU.Build.0 = Release|Any CPU
2935
EndGlobalSection
3036
GlobalSection(SolutionProperties) = preSolution
3137
HideSolutionNode = FALSE
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<AssemblyOriginatorKeyFile>../rabbit.snk</AssemblyOriginatorKeyFile>
6+
<SignAssembly>true</SignAssembly>
7+
<TargetFramework>netcoreapp3.1</TargetFramework>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<ProjectReference Include="..\RabbitMQ.Client\RabbitMQ.Client.csproj" />
16+
</ItemGroup>
17+
18+
</Project>

projects/Benchmarks/Program.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using BenchmarkDotNet.Running;
2+
3+
namespace Benchmarks
4+
{
5+
public static class Program
6+
{
7+
public static void Main(string[] args)
8+
{
9+
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
10+
}
11+
}
12+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using BenchmarkDotNet.Attributes;
3+
using RabbitMQ.Client.Framing.Impl;
4+
5+
namespace Benchmarks.WireFormatting
6+
{
7+
[ShortRunJob]
8+
[MemoryDiagnoser]
9+
public class WireFormatting_Read_BasicAck
10+
{
11+
private readonly byte[] _buffer = new byte[1024];
12+
13+
public WireFormatting_Read_BasicAck()
14+
{
15+
new BasicAck(ulong.MaxValue, true).WriteArgumentsTo(_buffer);
16+
}
17+
18+
[Benchmark(Baseline = true)]
19+
public object ReadFromSpan()
20+
{
21+
return new BasicAck(new ReadOnlySpan<byte>(_buffer));
22+
}
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using BenchmarkDotNet.Attributes;
3+
using BasicDeliver = RabbitMQ.Client.Framing.Impl.BasicDeliver;
4+
5+
namespace Benchmarks.WireFormatting
6+
{
7+
[ShortRunJob]
8+
[MemoryDiagnoser]
9+
public class WireFormatting_Read_BasicDeliver
10+
{
11+
private readonly byte[] _buffer = new byte[1024];
12+
13+
public WireFormatting_Read_BasicDeliver()
14+
{
15+
new BasicDeliver(string.Empty, 0, false, string.Empty, string.Empty).WriteArgumentsTo(_buffer);
16+
}
17+
18+
[Benchmark(Baseline = true)]
19+
public object ReadFromSpan()
20+
{
21+
return new BasicDeliver(new ReadOnlySpan<byte>(_buffer));
22+
}
23+
}
24+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using BenchmarkDotNet.Attributes;
3+
using BasicProperties = RabbitMQ.Client.Framing.BasicProperties;
4+
5+
namespace Benchmarks.WireFormatting
6+
{
7+
[ShortRunJob]
8+
[MemoryDiagnoser]
9+
public class WireFormatting_Read_BasicProperties
10+
{
11+
private readonly byte[] _buffer = new byte[1024];
12+
13+
public WireFormatting_Read_BasicProperties()
14+
{
15+
new BasicProperties
16+
{
17+
Persistent = true,
18+
AppId = "AppId",
19+
ContentEncoding = "content"
20+
}.WritePropertiesTo(_buffer);
21+
}
22+
23+
[Benchmark(Baseline = true)]
24+
public object ReadFromSpan()
25+
{
26+
return new BasicProperties(new ReadOnlySpan<byte>(_buffer));
27+
}
28+
}
29+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using BenchmarkDotNet.Attributes;
3+
using RabbitMQ.Client.Framing.Impl;
4+
5+
namespace Benchmarks.WireFormatting
6+
{
7+
[ShortRunJob]
8+
[MemoryDiagnoser]
9+
public class WireFormatting_Read_ChannelClose
10+
{
11+
private readonly byte[] _buffer = new byte[1024];
12+
13+
public WireFormatting_Read_ChannelClose()
14+
{
15+
new ChannelClose(333, string.Empty, 0099, 2999).WriteArgumentsTo(_buffer);
16+
}
17+
18+
[Benchmark(Baseline = true)]
19+
public object ReadFromSpan()
20+
{
21+
return new ChannelClose(new ReadOnlySpan<byte>(_buffer));
22+
}
23+
}
24+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using BenchmarkDotNet.Attributes;
2+
using RabbitMQ.Client.Framing.Impl;
3+
4+
namespace Benchmarks.WireFormatting
5+
{
6+
[ShortRunJob]
7+
[MemoryDiagnoser]
8+
public class WireFormatting_Write_BasicAck
9+
{
10+
private readonly byte[] _buffer = new byte[1024];
11+
private readonly BasicAck _method = new BasicAck(ulong.MaxValue, true);
12+
13+
[Benchmark(Baseline = true)]
14+
public int WriteArgumentsTo()
15+
{
16+
return _method.WriteArgumentsTo(_buffer);
17+
}
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using BenchmarkDotNet.Attributes;
2+
using BasicDeliver = RabbitMQ.Client.Framing.Impl.BasicDeliver;
3+
4+
namespace Benchmarks.WireFormatting
5+
{
6+
[ShortRunJob]
7+
[MemoryDiagnoser]
8+
public class WireFormatting_Write_BasicDeliver
9+
{
10+
private readonly byte[] _buffer = new byte[1024];
11+
private readonly BasicDeliver _method = new BasicDeliver(string.Empty, 0, false, string.Empty, string.Empty);
12+
13+
[Benchmark(Baseline = true)]
14+
public int WriteArgumentsTo()
15+
{
16+
return _method.WriteArgumentsTo(_buffer);
17+
}
18+
}
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using BenchmarkDotNet.Attributes;
3+
using BasicProperties = RabbitMQ.Client.Framing.BasicProperties;
4+
5+
namespace Benchmarks.WireFormatting
6+
{
7+
[ShortRunJob]
8+
[MemoryDiagnoser]
9+
public class WireFormatting_Write_BasicProperties
10+
{
11+
private readonly byte[] _buffer = new byte[1024];
12+
private readonly BasicProperties _properties = new BasicProperties
13+
{
14+
Persistent = true,
15+
AppId = "AppId",
16+
ContentEncoding = "content",
17+
};
18+
19+
[Benchmark(Baseline = true)]
20+
public void WritePropertiesToSpan()
21+
{
22+
_properties.WritePropertiesTo(new Span<byte>(_buffer));
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)