From 3e784a75623ca53ee311f40f49903313ac0042a4 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Tue, 29 Sep 2026 10:23:24 +0200 Subject: [PATCH] Record at the code what W5 measured about the list W5 of the performance series closed without a change in behaviour: the list's reaction and the scope switch have no lever on our side. Written beside the code so the next outside report does not propose them again. - RowList.Reconcile: the note said 143 ms and "still open where it goes". In process, with nothing polling the window, a query over 774 entries is a median of 25-55 ms, and our code is 2-4% of the interface thread in a managed profile and in kernel samples. The rest is WPF taking new rows. - Themes/Marks.xaml: one shared Binding per mark takes a row from 13 trigger bindings to 3 and did not move the query or scroll time. Not adopted. - MainViewModel.Scope: a scope move costs 33-68 ms (median), a reset could save at most the difference on one pair and breaks A10 elsewhere. Reread on a "Moved" tick is 0.7-1.0 ms against 0.3-0.5 ms for Apply alone. Comments only. No test, contract or behaviour changes. Co-Authored-By: Claude Opus 5.5 --- src/Bws.Gui/Themes/Marks.xaml | 12 ++++++++++++ src/Bws.Gui/ViewModels/MainViewModel.Scope.cs | 16 ++++++++++++++++ src/Bws.Gui/ViewModels/RowList.cs | 15 ++++++++++++--- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Bws.Gui/Themes/Marks.xaml b/src/Bws.Gui/Themes/Marks.xaml index f53226e..3282e25 100644 --- a/src/Bws.Gui/Themes/Marks.xaml +++ b/src/Bws.Gui/Themes/Marks.xaml @@ -76,6 +76,18 @@ word is translated - the code is not, and a trigger matching on "Running" would quietly stop matching the day a second language file appears - the row would just lose its colour, with nothing anywhere saying why. This project has had four of those. + + EVERY TRIGGER HERE CARRIES A BINDING OF ITS OWN, AND THAT WAS MEASURED AND KEPT - 2026-09-29. + WPF keeps one binding expression per Binding OBJECT per element, so five triggers are five + expressions on every status mark and seven on every start mark - thirteen of the eighteen + bindings a row carries. Handing each mark's triggers ONE shared Binding from this dictionary + (a keyed Binding and {StaticResource} in each trigger) takes a row to three, keeps every + trigger and setter as it is, and was built on a trial branch that day. The time did not + move: the list's answer to a query and the processor per scroll step came out the same + within their spread, interleaved runs of each. The external report of 2026-09-28 proposed + another way to the same count - one binding into Tag and plain Triggers - which also needs + MarkDistinctionGuards rewritten, and it was not built once the count itself had bought + nothing. Not worth a change to the product, by the owner's decision on the numbers. -->