Skip to content

Commit 3cb3626

Browse files
authored
DYN-8308: Fix temporary connector and Node memory leak (#16198)
1 parent fa8c3e2 commit 3cb3626

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

src/DynamoCoreWpf/ViewModels/Core/ConnectorViewModel.cs

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,25 +1204,32 @@ private void UpdateDynamicStrokeThickness()
12041204
/// </summary>
12051205
public override void Dispose()
12061206
{
1207-
model.PropertyChanged -= HandleConnectorPropertyChanged;
1207+
if (model != null)
1208+
{
1209+
model.PropertyChanged -= HandleConnectorPropertyChanged;
1210+
1211+
model.Start.PropertyChanged -= StartPortModel_PropertyChanged;
1212+
model.End.PropertyChanged -= EndPortModel_PropertyChanged;
12081213

1209-
model.Start.PropertyChanged -= StartPortModel_PropertyChanged;
1210-
model.End.PropertyChanged -= EndPortModel_PropertyChanged;
1214+
model.Start.Owner.PropertyChanged -= StartOwner_PropertyChanged;
1215+
model.End.Owner.PropertyChanged -= EndOwner_PropertyChanged;
1216+
model.ConnectorPinModels.CollectionChanged -= ConnectorPinModelCollectionChanged;
12111217

1212-
model.Start.Owner.PropertyChanged -= StartOwner_PropertyChanged;
1213-
model.End.Owner.PropertyChanged -= EndOwner_PropertyChanged;
1214-
model.ConnectorPinModels.CollectionChanged -= ConnectorPinModelCollectionChanged;
1218+
// Nodevm and NodeEnd props are found via model
1219+
if (Nodevm != null)
1220+
{
1221+
Nodevm.PropertyChanged -= nodeViewModel_PropertyChanged;
1222+
}
1223+
if (NodeEnd != null)
1224+
{
1225+
NodeEnd.PropertyChanged -= nodeEndViewModel_PropertyChanged;
1226+
}
1227+
}
1228+
1229+
workspaceViewModel.PropertyChanged -= WorkspaceViewModel_PropertyChanged;
12151230

12161231
workspaceViewModel.DynamoViewModel.PropertyChanged -= DynamoViewModel_PropertyChanged;
12171232
workspaceViewModel.DynamoViewModel.Model.PreferenceSettings.PropertyChanged -= DynamoViewModel_PropertyChanged;
1218-
if (Nodevm != null)
1219-
{
1220-
Nodevm.PropertyChanged -= nodeViewModel_PropertyChanged;
1221-
}
1222-
if (NodeEnd != null)
1223-
{
1224-
NodeEnd.PropertyChanged -= nodeEndViewModel_PropertyChanged;
1225-
}
12261233

12271234
if (ConnectorPinViewCollection != null)
12281235
{
@@ -1235,16 +1242,14 @@ public override void Dispose()
12351242
}
12361243
}
12371244

1238-
workspaceViewModel.PropertyChanged -= WorkspaceViewModel_PropertyChanged;
1239-
12401245
this.PropertyChanged -= ConnectorViewModelPropertyChanged;
12411246
DiscardAllConnectorPinModels();
12421247

1243-
if(ConnectorContextMenuViewModel != null)
1248+
if (ConnectorContextMenuViewModel != null)
12441249
{
12451250
ConnectorContextMenuViewModel.Dispose();
12461251
}
1247-
if(ConnectorAnchorViewModel != null)
1252+
if (ConnectorAnchorViewModel != null)
12481253
{
12491254
ConnectorAnchorViewModel.Dispose();
12501255
}

src/DynamoCoreWpf/ViewModels/Core/StateMachine.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ internal void UpdateActiveConnector(System.Windows.Point mouseCursor)
332332
foreach (ConnectorViewModel a in activeConnectors)
333333
{
334334
this.WorkspaceElements.Remove(a);
335+
a.Dispose();
335336
}
336337
}
337338
this.activeConnectors = null;

src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ public NodeView()
128128
nodeBorder.SizeChanged += OnSizeChanged;
129129
DataContextChanged += OnDataContextChanged;
130130

131-
132131
Panel.SetZIndex(this, 1);
133132
}
134133

@@ -154,6 +153,8 @@ private void OnNodeViewUnloaded(object sender, RoutedEventArgs e)
154153
previewControl = null;
155154
}
156155
nodeBorder.SizeChanged -= OnSizeChanged;
156+
DataContextChanged -= OnDataContextChanged;
157+
Loaded -= OnNodeViewLoaded;
157158
}
158159

159160
#endregion

src/DynamoCoreWpf/Views/Core/WorkspaceView.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,7 @@ private void OnGeometryScaling_Click(object sender, RoutedEventArgs e)
12921292
public void Dispose()
12931293
{
12941294
RemoveViewModelsubscriptions(ViewModel);
1295+
DataContextChanged -= OnWorkspaceViewDataContextChanged;
12951296
}
12961297
}
12971298
}

0 commit comments

Comments
 (0)