Modify ↓
#23085 closed enhancement (fixed)
[PATCH] Improve speed of selecting large amounts of objects
Reported by: | Nzara | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | 23.08 |
Component: | Core | Version: | |
Keywords: | Cc: |
Description
If you accidentally press Ctrl-A (Select All) after having downloaded a large data set, the system may become unresponsive for a several minutes. This gives you an involuntary coffee break.
A way to cancel a long running operation would be helpful.
Attachments (1)
Change History (5)
by , 21 months ago
Attachment: | 23085.patch added |
---|
comment:2 by , 21 months ago
Summary: | Allow aborting of long running opertions → [PATCH] Allow aborting of long running opertions |
---|
Notes on the patch:
- Avoid
Stream
allocations inConflictCollection.hasConflictForMy
by only looking for a conflict if conflicts exist - Avoid many string instantiations in
DefaultNameFormatter
by using cached properties - Avoid some
Stream
allocations by using standardfor
loops inDefaultNameFormatter
- Use
""
to get the component inPrimitiveRenderer.getListCellRendererComponent
-- this reduced the memory allocations by ~50% by itself, and appears to have no side-effects. We should ask users on different systems with different UI systems if it works properly. - Significantly reduce cost of
Way.hasOnlyLocatableNodes
by using a standardfor
loop instead of a stream -- this isn't as important for this ticket, but was found while profiling.
comment:4 by , 21 months ago
Summary: | [PATCH] Allow aborting of long running opertions → [PATCH] Improve speed of selecting large amounts of objects |
---|
Note:
See TracTickets
for help on using tickets.
Replying to Nzara:
It might be more useful for us to profile the code path and fix that instead.
For this specific case, it looks like it is mostly due to
PrimitiveRenderer.getListCellRendererComponent
.Almost all the non-JVM CPU cycles are taken up inside that method by formatting code.
Almost all the memory allocations are done by
PrimitiveRenderer.getListCellRendererComponent
. The memory allocations are particularly bad (getListCellRendererComponent
takes ~8 GB of allocations forMesa County, Colorado
(my "large" test file)).With that said, doing the same thing multiple times will result in various optimizations from the JVM (this can be really significant; 50s to 30s as an example).
For all I know, it might be doing one of the "easy" optimizations already after the first run.