From 1d578debe24326fb1c4e5f0a0fb83b97e852bafa Mon Sep 17 00:00:00 2001 From: Alberto Balbo Date: Thu, 6 Aug 2026 14:48:54 +0200 Subject: [PATCH] Togli dal percorso caldo la rilettura dell'intero storico Sei modifiche chieste in questa sessione, di cui una pesa piu' di tutte le altre. CompletedAuctionsStore rileggeva e rideserializzava l'intero file a ogni chiamata: misurati 72 ms su 5876 record, 3,9 MB. Append pagava quel prezzo piu' la riserializzazione e la riscrittura completa per cambiare un record solo, 120 ms in tutto, e la chiamata arriva da un gestore di eventi di MainWindow, quindi dal thread dell'interfaccia, che restava fermo a ogni asta conclusa. Il recupero delle puntate dei vincitori lo faceva in un ciclo: 4675 aste erano 7,2 minuti di solo rimescolamento JSON e 17,8 GB scritti sul disco. Adesso c'e' una copia in memoria invalidata sulla data di modifica del file, cosi' resta giusta anche se il file viene sostituito da fuori (ripristino di un backup), e un AppendMany che applica molti record con un salvataggio solo, con un indice per id perche' il caso per cui esiste non torni quadratico. Il recupero salva a blocchi di cinquanta e deposita comunque quello che ha in mano quando esce, anche per annullamento: le richieste gia' fatte sono state pagate al server. Misurato sullo stesso file: 95 volte piu' veloce, 7,2 minuti diventano 4,5 secondi, 17,8 GB diventano 0,36 GB. Le altre cinque: - Il setup si chiama AutoBidder_.exe. - I pulsanti di stop sono rossi, sia quello globale sia quelli per asta nella griglia: erano gli unici tre senza colore mentre avvia e osserva ce l'avevano. - La pulizia dello storico sa togliere le aste seguite solo in parte. Non serve nessun campo nuovo: il prezzo finale in centesimi e' il totale delle puntate dell'asta, quindi il rapporto con i reset osservati dice quanta asta si e' vista, e la regola vale anche sullo storico gia' raccolto. Verificata sui dati veri: su 5876 aste nessuna supera copertura 1,02, che e' quanto ci si aspetta se l'identita' e' giusta. - La griglia ricicla i contenitori di riga invece di ricrearli. - Il costo puntata gia' esisteva col predefinito giusto: al suggerimento e' stato aggiunto perche' 0,20 e' il numero da tenere. Co-Authored-By: Claude Opus 5 --- Mimante/Controls/AuctionMonitorControl.xaml | 2 + Mimante/Controls/SettingsControl.xaml | 2 +- Mimante/Dialogs/StatsCleanupDialog.xaml | 11 ++ Mimante/Dialogs/StatsCleanupDialog.xaml.cs | 11 ++ Mimante/Modifiche.txt | 8 +- Mimante/Services/WinnerBidsBackfill.cs | 106 +++++++++----- Mimante/Tests/BidBudgetTests.cs | 69 ++++++++++ Mimante/Tests/CompletedAuctionsStoreTests.cs | 137 +++++++++++++++++++ Mimante/Themes/Controls.xaml | 6 + Mimante/Utilities/AuctionIntegrity.cs | 28 ++++ Mimante/Utilities/CompletedAuctionsStore.cs | 92 +++++++++++-- Mimante/Utilities/StatsMaintenance.cs | 20 +++ Mimante/build/AutoBidder.iss | 2 +- Mimante/build/Release.proj | 4 +- 14 files changed, 448 insertions(+), 50 deletions(-) create mode 100644 Mimante/Tests/CompletedAuctionsStoreTests.cs diff --git a/Mimante/Controls/AuctionMonitorControl.xaml b/Mimante/Controls/AuctionMonitorControl.xaml index 210e157..11a2705 100644 --- a/Mimante/Controls/AuctionMonitorControl.xaml +++ b/Mimante/Controls/AuctionMonitorControl.xaml @@ -60,6 +60,7 @@