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

This commit is contained in:
2022-12-29 14:01:01 +01:00
committed by Wojtek Figat
parent c6bbfdc7f0
commit 1d47374758
+9 -11
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>