1
0
mirror of https://github.com/Siccity/xNode.git synced 2025-12-20 01:06:01 +08:00

cache the AssemblyQualifiedName string, reduces number of allocations and garbage collection in projects with many nodes

This commit is contained in:
Simon Rodriguez 2022-11-02 09:08:57 +01:00
parent f0b7882f6e
commit a077ca136b
2 changed files with 13 additions and 1 deletions

View File

@ -8,8 +8,20 @@ namespace XNode {
public static class NodeDataCache { public static class NodeDataCache {
private static PortDataCache portDataCache; private static PortDataCache portDataCache;
private static Dictionary<System.Type, Dictionary<string, string>> formerlySerializedAsCache; private static Dictionary<System.Type, Dictionary<string, string>> formerlySerializedAsCache;
private static Dictionary<System.Type, string> typeQualifiedNameCache;
private static bool Initialized { get { return portDataCache != null; } } private static bool Initialized { get { return portDataCache != null; } }
public static string GetTypeQualifiedName(System.Type type) {
if(typeQualifiedNameCache == null) typeQualifiedNameCache = new Dictionary<System.Type, string>();
string name;
if (!typeQualifiedNameCache.TryGetValue(type, out name)) {
name = type.AssemblyQualifiedName;
typeQualifiedNameCache.Add(type, name);
}
return name;
}
/// <summary> Update static ports and dynamic ports managed by DynamicPortLists to reflect class fields. </summary> /// <summary> Update static ports and dynamic ports managed by DynamicPortLists to reflect class fields. </summary>
public static void UpdatePorts(Node node, Dictionary<string, NodePort> ports) { public static void UpdatePorts(Node node, Dictionary<string, NodePort> ports) {
if (!Initialized) BuildCache(); if (!Initialized) BuildCache();

View File

@ -48,7 +48,7 @@ namespace XNode {
} }
set { set {
valueType = value; valueType = value;
if (value != null) _typeQualifiedName = value.AssemblyQualifiedName; if (value != null) _typeQualifiedName = NodeDataCache.GetTypeQualifiedName(value);
} }
} }
private Type valueType; private Type valueType;