Cache managed serializers for networking replication to prevent from being collected by GC

This commit is contained in:
Wojciech Figat
2022-12-29 14:01:01 +01:00
parent c2bb717a69
commit 9083f511b5

View File

@@ -52,22 +52,20 @@ namespace FlaxEngine.Networking
[Unmanaged]
public static void AddSerializer(Type type, SerializeFunc serialize, SerializeFunc deserialize)
{
if (_managedSerializers == null)
{
_managedSerializers = new Dictionary<Type, KeyValuePair<SerializeFunc, SerializeFunc>>();
#if FLAX_EDITOR
FlaxEditor.ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
#endif
}
_managedSerializers[type] = new KeyValuePair<SerializeFunc, SerializeFunc>(serialize, deserialize);
// C#-only types (eg. custom C# structures) cannot use native serializers due to missing ScriptingType
if (typeof(FlaxEngine.Object).IsAssignableFrom(type))
{
Internal_AddSerializer(type, Marshal.GetFunctionPointerForDelegate(serialize), Marshal.GetFunctionPointerForDelegate(deserialize));
}
else
{
if (_managedSerializers == null)
{
_managedSerializers = new Dictionary<Type, KeyValuePair<SerializeFunc, SerializeFunc>>();
#if FLAX_EDITOR
FlaxEditor.ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
#endif
}
_managedSerializers[type] = new KeyValuePair<SerializeFunc, SerializeFunc>(serialize, deserialize);
}
}
/// <summary>