Index: src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/AddPrimitivesCommand.java	(revision 18689)
+++ src/org/openstreetmap/josm/command/AddPrimitivesCommand.java	(working copy)
@@ -5,9 +5,11 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.swing.Icon;
@@ -126,6 +128,11 @@
             }
             createdPrimitives = PurgeCommand.topoSort(createdPrimitives);
         }
+        // clear selection to improve performance, see #22808
+        Set<OsmPrimitive> clearedSelection = new LinkedHashSet<>(ds.getSelected());
+        clearedSelection.removeAll(createdPrimitives);
+        ds.clearSelection();
+
         // reversed order, see #14620
         for (int i = createdPrimitives.size() - 1; i >= 0; i--) {
             OsmPrimitive osm = createdPrimitives.get(i);
@@ -137,6 +144,8 @@
                 ds.removePrimitive(osm);
             }
         }
+        // select still existing objects of old selection
+        ds.setSelected(clearedSelection);
     }
 
     @Override
