Skip to content

Commit 7ce738c

Browse files
committed
Reduced reflection for SyncedVar & NetworkedVar init
1 parent 12b2c0e commit 7ce738c

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,8 @@ internal void SyncVarInit()
680680
if (syncVarInit)
681681
return;
682682
syncVarInit = true;
683-
FieldInfo[] sortedFields = GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance).OrderBy(x => x.Name).ToArray();
683+
684+
FieldInfo[] sortedFields = GetFieldInfoForType(GetType());
684685
for (int i = 0; i < sortedFields.Length; i++)
685686
{
686687
if(sortedFields[i].IsDefined(typeof(SyncedVar), true))
@@ -931,13 +932,22 @@ private bool SetDirtyness()
931932
private readonly List<HashSet<int>> channelMappedVarIndexes = new List<HashSet<int>>();
932933
private readonly List<string> channelsForVarGroups = new List<string>();
933934
internal readonly List<INetworkedVar> networkedVarFields = new List<INetworkedVar>();
935+
private static readonly Dictionary<Type, FieldInfo[]> fieldTypes = new Dictionary<Type, FieldInfo[]>();
936+
937+
private static FieldInfo[] GetFieldInfoForType(Type type)
938+
{
939+
if (!fieldTypes.ContainsKey(type))
940+
fieldTypes.Add(type, type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance).OrderBy(x => x.Name).ToArray());
941+
return fieldTypes[type];
942+
}
943+
934944
internal void NetworkedVarInit()
935945
{
936946
if (networkedVarInit)
937947
return;
938948
networkedVarInit = true;
939949

940-
FieldInfo[] sortedFields = GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance).OrderBy(x => x.Name).ToArray();
950+
FieldInfo[] sortedFields = GetFieldInfoForType(GetType());
941951
for (int i = 0; i < sortedFields.Length; i++)
942952
{
943953
Type fieldType = sortedFields[i].FieldType;

0 commit comments

Comments
 (0)