@@ -292,38 +292,47 @@ public void ReplaceSelectedNodesWithType(Type type)
292292 var hotSpotPartitions = selectedNodes
293293 . WhereNot ( s => s . Node is ClassNode )
294294 . GroupBy ( s => s . Node . GetParentContainer ( ) )
295- . SelectMany ( g => g
296- . OrderBy ( s => s . Node . Offset )
297- . GroupWhile ( ( h1 , h2 ) => h1 . Node . Offset + h1 . Node . MemorySize == h2 . Node . Offset )
298- ) ;
295+ . Select ( g => new
296+ {
297+ Container = g . Key ,
298+ Partitions = g . OrderBy ( s => s . Node . Offset )
299+ . GroupWhile ( ( s1 , s2 ) => s1 . Node . Offset + s1 . Node . MemorySize == s2 . Node . Offset )
300+ } ) ;
299301
300- foreach ( var selectedPartition in hotSpotPartitions )
302+ foreach ( var containerPartitions in hotSpotPartitions )
301303 {
302- var hotSpotsToReplace = new Queue < MemoryViewControl . SelectedNodeInfo > ( selectedPartition ) ;
303- while ( hotSpotsToReplace . Count > 0 )
304+ containerPartitions . Container . BeginUpdate ( ) ;
305+
306+ foreach ( var partition in containerPartitions . Partitions )
304307 {
305- var selected = hotSpotsToReplace . Dequeue ( ) ;
308+ var hotSpotsToReplace = new Queue < MemoryViewControl . SelectedNodeInfo > ( partition ) ;
309+ while ( hotSpotsToReplace . Count > 0 )
310+ {
311+ var selected = hotSpotsToReplace . Dequeue ( ) ;
306312
307- var node = BaseNode . CreateInstanceFromType ( type ) ;
313+ var node = BaseNode . CreateInstanceFromType ( type ) ;
308314
309- var createdNodes = new List < BaseNode > ( ) ;
310- selected . Node . GetParentContainer ( ) . ReplaceChildNode ( selected . Node , node , ref createdNodes ) ;
315+ var createdNodes = new List < BaseNode > ( ) ;
316+ containerPartitions . Container . ReplaceChildNode ( selected . Node , node , ref createdNodes ) ;
311317
312- node . IsSelected = true ;
318+ node . IsSelected = true ;
313319
314- var info = new MemoryViewControl . SelectedNodeInfo ( node , selected . Process , selected . Memory , selected . Address , selected . Level ) ;
320+ var info = new MemoryViewControl . SelectedNodeInfo ( node , selected . Process , selected . Memory , selected . Address , selected . Level ) ;
315321
316- newSelected . Add ( info ) ;
322+ newSelected . Add ( info ) ;
317323
318- // If more than one node is selected I assume the user wants to replace the complete range with the desired node type.
319- if ( selectedNodes . Count > 1 )
320- {
321- foreach ( var createdNode in createdNodes )
324+ // If more than one node is selected I assume the user wants to replace the complete range with the desired node type.
325+ if ( selectedNodes . Count > 1 )
322326 {
323- hotSpotsToReplace . Enqueue ( new MemoryViewControl . SelectedNodeInfo ( createdNode , selected . Process , selected . Memory , selected . Address + createdNode . Offset - node . Offset , selected . Level ) ) ;
327+ foreach ( var createdNode in createdNodes )
328+ {
329+ hotSpotsToReplace . Enqueue ( new MemoryViewControl . SelectedNodeInfo ( createdNode , selected . Process , selected . Memory , selected . Address + createdNode . Offset - node . Offset , selected . Level ) ) ;
330+ }
324331 }
325332 }
326333 }
334+
335+ containerPartitions . Container . EndUpdate ( ) ;
327336 }
328337
329338 memoryViewControl . ClearSelection ( ) ;
@@ -373,6 +382,8 @@ private void PasteNodeFromClipboardToSelection()
373382 var classNode = selectedNode . GetParentClass ( ) ;
374383 if ( containerNode != null && classNode != null )
375384 {
385+ containerNode . BeginUpdate ( ) ;
386+
376387 foreach ( var node in result . Item2 )
377388 {
378389 if ( node is BaseWrapperNode )
@@ -394,6 +405,8 @@ private void PasteNodeFromClipboardToSelection()
394405
395406 containerNode . InsertNode ( selectedNode , node ) ;
396407 }
408+
409+ containerNode . EndUpdate ( ) ;
397410 }
398411 }
399412 }
0 commit comments