Skip to content

Commit

Permalink
Improve graph opening times, reduce reflecion calls (#15761)
Browse files Browse the repository at this point in the history
Co-authored-by: pinzart90 <[email protected]>
Co-authored-by: Tiberiu Pinzariu <[email protected]>
  • Loading branch information
3 people authored Feb 11, 2025
1 parent ebee018 commit 512f789
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 20 deletions.
11 changes: 5 additions & 6 deletions src/DynamoCore/Graph/Nodes/NodeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1223,18 +1223,17 @@ protected NodeModel(IEnumerable<PortModel> inPorts, IEnumerable<PortModel> outPo
RaisesModificationEvents = true;
}


internal protected AssemblyName NameOfAssemblyReferencedByNode = null;

/// <summary>
/// The method returns the assembly name from which the node originated.
/// </summary>
/// <returns>Assembly Name</returns>
internal virtual AssemblyName GetNameOfAssemblyReferencedByNode()
{
AssemblyName assemblyName = null;

var assembly = this.GetType().Assembly;
assemblyName = AssemblyName.GetAssemblyName(assembly.Location);

return assemblyName;
NameOfAssemblyReferencedByNode ??= GetType().Assembly.GetName();
return NameOfAssemblyReferencedByNode;
}

/// <summary>
Expand Down
13 changes: 7 additions & 6 deletions src/DynamoCore/Graph/Nodes/ZeroTouch/DSFunctionBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,16 @@ public override IdentifierNode GetAstIdentifierForOutputIndex(int outputIndex)
/// <returns>Assembly Name</returns>
internal override AssemblyName GetNameOfAssemblyReferencedByNode()
{
AssemblyName assemblyName = null;

var descriptor = this.Controller.Definition;
if (descriptor.IsPackageMember)
if (NameOfAssemblyReferencedByNode == null)
{
assemblyName = AssemblyName.GetAssemblyName(descriptor.Assembly);
var descriptor = this.Controller.Definition;
if (descriptor.IsPackageMember)
{
NameOfAssemblyReferencedByNode = AssemblyName.GetAssemblyName(descriptor.Assembly);
}
}

return assemblyName;
return NameOfAssemblyReferencedByNode;
}

/// <summary>
Expand Down
1 change: 1 addition & 0 deletions src/DynamoCore/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1004,6 +1004,7 @@ Dynamo.Graph.Nodes.NodeModel.MarkNodeAsModified(bool forceExecute = false) -> vo
Dynamo.Graph.Nodes.NodeModel.Modified -> System.Action<Dynamo.Graph.Nodes.NodeModel>
Dynamo.Graph.Nodes.NodeModel.Name.get -> string
Dynamo.Graph.Nodes.NodeModel.Name.set -> void
Dynamo.Graph.Nodes.NodeModel.NameOfAssemblyReferencedByNode -> System.Reflection.AssemblyName
Dynamo.Graph.Nodes.NodeModel.NeedsForceExecution.get -> bool
Dynamo.Graph.Nodes.NodeModel.NodeExecutionBegin -> System.Action<Dynamo.Graph.Nodes.NodeModel>
Dynamo.Graph.Nodes.NodeModel.NodeExecutionEnd -> System.Action<Dynamo.Graph.Nodes.NodeModel>
Expand Down
5 changes: 3 additions & 2 deletions src/DynamoPackages/PackageManagerExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,11 @@ private void OnCurrentWorkspaceChanged(IWorkspaceModel ws)

private PackageInfo GetNodePackageFromAssemblyName(AssemblyName assemblyName)
{
if (NodePackageDictionary != null && NodePackageDictionary.ContainsKey(assemblyName.FullName))
if (NodePackageDictionary?.TryGetValue(assemblyName.FullName, out var packages) == true)
{
return NodePackageDictionary[assemblyName.FullName].Last();
return packages.Last();
}

return null;
}

Expand Down
13 changes: 7 additions & 6 deletions src/Libraries/PythonNodeModels/PythonNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,16 @@ public string EngineName
/// <returns>Assembly Name</returns>
internal override AssemblyName GetNameOfAssemblyReferencedByNode()
{
AssemblyName assemblyName = null;

var pyEng = PythonEngineManager.Instance.AvailableEngines.Where(x => x.Name.Equals(this.EngineName)).FirstOrDefault();
if (pyEng != null)
if (NameOfAssemblyReferencedByNode == null)
{
assemblyName = AssemblyName.GetAssemblyName(pyEng.GetType().Assembly.Location);
var pyEng = PythonEngineManager.Instance.AvailableEngines.Where(x => x.Name.Equals(this.EngineName)).FirstOrDefault();
if (pyEng != null)
{
NameOfAssemblyReferencedByNode = pyEng.GetType().Assembly.GetName();
}
}

return assemblyName;
return NameOfAssemblyReferencedByNode;
}

/// <summary>
Expand Down

0 comments on commit 512f789

Please sign in to comment.