serialization improves and benchmarks

This commit is contained in:
2025-07-27 23:46:54 +03:00
parent 6c55567d3f
commit 965c8eb823
13 changed files with 243 additions and 94 deletions
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Formats.Cbor;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using mROA.Implementation;
namespace mROA.Cbor
{
public static class CborExtensions
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void WriteToCborInline(this RequestId id, CborWriter writer)
{
Span<byte> span = stackalloc byte[16];
MemoryMarshal.Write(span, ref id);
writer.WriteByteString(span);
}
}
}
+6 -11
View File
@@ -18,7 +18,7 @@ namespace mROA.Cbor
private readonly IOrdinaryStructureParser[] _parsers =
{
new NetworkMessageHeaderParser(), new DefaultCallRequestParser(), new FinalCommandExecutionParser(),
new DefaultCallRequestParser(), new FinalCommandExecutionParser(),
new FinalCommandExecutionResultlessParser()
};
@@ -27,27 +27,21 @@ namespace mROA.Cbor
private bool FindParser(Type t, out IOrdinaryStructureParser parser)
{
if (t == typeof(NetworkMessage))
if (t == typeof(DefaultCallRequest))
{
parser = _parsers[0];
return true;
}
if (t == typeof(DefaultCallRequest))
if (t == typeof(FinalCommandExecution<object>))
{
parser = _parsers[1];
return true;
}
if (t == typeof(FinalCommandExecution<object>))
{
parser = _parsers[2];
return true;
}
if (t == typeof(FinalCommandExecution))
{
parser = _parsers[3];
parser = _parsers[2];
return true;
}
@@ -165,7 +159,8 @@ namespace mROA.Cbor
writer.WriteDateTimeOffset(dto);
break;
case RequestId g:
writer.WriteByteString(g.ToByteArray());
// writer.WriteByteString(g.ToByteArray());
g.WriteToCborInline(writer);
break;
case byte[] bytes:
writer.WriteByteString(bytes);
+6 -28
View File
@@ -12,38 +12,14 @@ namespace mROA.Cbor
object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization);
}
public class NetworkMessageHeaderParser : IOrdinaryStructureParser
{
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
var v = value as NetworkMessage;
writer.WriteStartArray(3);
writer.WriteByteString(v.Id.ToByteArray());
writer.WriteInt32((int)v.MessageType);
writer.WriteByteString(v.Data);
writer.WriteEndArray();
}
public object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization)
{
reader.ReadStartArray();
var value = new NetworkMessage
{
Id = new RequestId(reader.ReadByteString()),
MessageType = (EMessageType)reader.ReadInt32(),
Data = reader.ReadByteString()
};
return value;
}
}
public class DefaultCallRequestParser : IOrdinaryStructureParser
{
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
var v = (DefaultCallRequest)value;
writer.WriteStartArray(4);
writer.WriteByteString(v.Id.ToByteArray());
v.Id.WriteToCborInline(writer);
// writer.WriteByteString(v.Id.ToByteArray());
writer.WriteInt32(v.CommandId);
writer.WriteStartArray(1);
writer.WriteUInt64(v.ObjectId.Flat);
@@ -92,7 +68,8 @@ namespace mROA.Cbor
{
var v = (FinalCommandExecution<object>)value;
writer.WriteStartArray(2);
writer.WriteByteString(v.Id.ToByteArray());
// writer.WriteByteString(v.Id.ToByteArray());
v.Id.WriteToCborInline(writer);
serialization.WriteData(v.Result, writer, context);
writer.WriteEndArray();
}
@@ -116,7 +93,8 @@ namespace mROA.Cbor
{
var v = (FinalCommandExecution)value;
writer.WriteStartArray(1);
writer.WriteByteString(v.Id.ToByteArray());
// writer.WriteByteString(v.Id.ToByteArray());
v.Id.WriteToCborInline(writer);
writer.WriteEndArray();
}
+1
View File
@@ -7,6 +7,7 @@
<Version>2.0.7</Version>
<LangVersion>9</LangVersion>
<PackageIcon>mroaLogo.png</PackageIcon>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">