2020-02-23 14:24:17 +01:00

52 lines
1.2 KiB
C#

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using Capnp.Rpc;
using CapnpGen;
using System;
using System.Collections.Generic;
using System.Text;
namespace Benchmark
{
public class CapnpBenchmark
{
[Params(20, 200, 2000, 20000, 200000, 2000000)]
public int PayloadBytes;
[Params(0, 256, 1024, 4096)]
public int BufferSize;
TcpRpcClient _client;
IEchoer _echoer;
byte[] _payload;
[GlobalSetup]
public void Setup()
{
_client = new TcpRpcClient("localhost", 5002);
if (BufferSize > 0)
_client.AddBuffering(BufferSize);
_client.WhenConnected.Wait();
_echoer = _client.GetMain<IEchoer>();
_payload = new byte[PayloadBytes];
new Random().NextBytes(_payload);
}
[GlobalCleanup]
public void Cleanup()
{
_echoer.Dispose();
_client.Dispose();
}
[Benchmark]
public void Echo()
{
var t = _echoer.Echo(_payload);
t.Wait();
if (t.Result?.Count != _payload.Length)
throw new InvalidOperationException("Echo server malfunction");
}
}
}