Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve graph opening times, reduce reflecion calls #15761

Merged
merged 11 commits into from
Feb 11, 2025
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;
}


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
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
Loading