Faster cbor serialization with caching
This commit is contained in:
@@ -13,6 +13,7 @@ namespace mROA.Cbor
|
||||
{
|
||||
public class CborSerializationToolkit : IContextualSerializationToolKit
|
||||
{
|
||||
private static Dictionary<Type, List<PropertyInfo>> _propertiesCache = new();
|
||||
public static TimeSpan SerializationTime = TimeSpan.Zero;
|
||||
public byte[] Serialize(object objectToSerialize, IEndPointContext context)
|
||||
{
|
||||
@@ -231,7 +232,7 @@ namespace mROA.Cbor
|
||||
return;
|
||||
}
|
||||
|
||||
var properties = FilterProperties(type.GetProperties());
|
||||
var properties = GetAvalibleProperties(type);
|
||||
var values = properties.Select(property => property.GetValue(obj)).ToList();
|
||||
WriteList(values, writer, context);
|
||||
}
|
||||
@@ -402,9 +403,7 @@ namespace mROA.Cbor
|
||||
|
||||
private void FillObject(object obj, Type type, CborReader reader, IEndPointContext? context)
|
||||
{
|
||||
var propertyInfos = type.GetProperties();
|
||||
var properties = FilterProperties(propertyInfos);
|
||||
|
||||
var properties = GetAvalibleProperties(type);
|
||||
var length = reader.ReadStartArray();
|
||||
try
|
||||
{
|
||||
@@ -441,5 +440,16 @@ namespace mROA.Cbor
|
||||
|
||||
return finalProperties;
|
||||
}
|
||||
|
||||
private List<PropertyInfo> GetAvalibleProperties(Type type)
|
||||
{
|
||||
if (_propertiesCache.TryGetValue(type, out var properties))
|
||||
{
|
||||
return properties;
|
||||
}
|
||||
var propertiesList = FilterProperties(type.GetProperties());
|
||||
_propertiesCache[type] = propertiesList;
|
||||
return propertiesList;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user