Documenti per chi installa da zero, pulizia per prodotto ed esborso, modalita' Gara
Tre richieste, piu' la causa vera della lentezza trovata misurando. PERCORSI. Le impostazioni e i dati vanno in Documenti\AutoBidder per chi installa da zero; sessione, riferimenti del sito e profilo del browser restano in %LocalAppData%, perche' la sessione e' protetta con DPAPI e legata all'utente Windows. Chi ha gia' un'installazione non viene spostato: se le impostazioni esistono in %LocalAppData% e non in Documenti si continua a usare quelle dove sono (scelta esplicita dell'utente, per non toccare mesi di raccolta). La radice si decide una volta sola all'avvio e non cambia piu' nel processo. La suite di test la dirotta in una cartella temporanea: senza, un test che tocca le impostazioni leggerebbe quelle vere. PULIZIA. Tre criteri nuovi: per prodotto (elenco con i conteggi, confronto senza maiuscole), solo osservate / con mie puntate (i due versi: storico compatto delle proprie partite, o storico "di mercato" senza le proprie mosse), prezzo finale oltre una percentuale del valore (le chiusure incaponite spostano medie e limiti consigliati verso l'alto per tutti; senza valore noto l'asta resta, non si indovina). Dopo ogni pulizia le statistiche per prodotto si ricostruiscono da zero dallo storico rimasto: sono un archivio a parte alimentato asta per asta, e avrebbero continuato a descrivere aste che non ci sono piu'. MODALITA'. Addestramento registra tutto; Gara toglie i poll grezzi nel dossier, le righe informative del registro dell'asta e il dettaglio esteso. Letta una volta all'avvio e immutabile fino alla chiusura, come chiesto: la scheda mostra la modalita' in vigore e avvisa del riavvio solo se la scelta differisce. Misurato prima di promettere: il lavoro che Gara evita costa 4,9 microsecondi per poll. A 57 aste per 17 poll al secondo sono 4,7 ms di CPU al secondo, mezzo punto di un core. La scrittura su disco era gia' asincrona. Gara fa bene al disco e ai dossier, non alla velocita'. LA LENTEZZA VERA. Ogni poll arrivava al thread dell'interfaccia: un BeginInvoke, una scansione lineare dei ViewModel e venti notifiche di proprieta'. Con trenta aste diecimila notifiche al secondo, con cinquantasette quasi ventimila. Adesso si manda all'interfaccia solo il poll in cui cambia qualcosa di visibile (prezzo, puntatore, stato, secondo intero, se e' mio), e comunque uno al secondo per asta perche' ping e contatori si rinfreschino. Il conto alla rovescia scorre gia' da solo con il battito da 200 ms. Il motore non e' toccato: la decisione di puntare vede ogni poll come prima. Misurato su 40 dossier veri, 146.138 poll: ne passano 16.375, l'88,8% viene scartato. Nove volte meno lavoro sul thread dell'interfaccia. Nella scheda Impostazioni entrano anche la fascia oraria e la pulizia dell'elenco, che il motore usava gia' ma che non si potevano ancora cambiare. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -44,6 +44,57 @@
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- SEZIONE 0-ter: Modalità della sessione -->
|
||||
<Border Style="{StaticResource CardBlock}">
|
||||
<StackPanel>
|
||||
<ctl:HelpHeader Title="Modalità della sessione"
|
||||
Margin="0,0,0,14"
|
||||
Help="Addestramento registra tutto: ogni interrogazione nel dossier, ogni decisione della strategia, il dettaglio esteso delle aste concluse. È la modalità con cui si raccolgono i dati per tarare le regole. Gara fa solo il lavoro che serve a puntare: niente poll grezzi nel dossier, niente righe informative nel registro dell'asta, niente dettaglio esteso. Restano puntate, esiti, errori e lo storico delle aste concluse. Cosa aspettarsi, misurato: il lavoro che Gara evita costa 4,9 microsecondi per interrogazione — con 57 aste a 17 poll al secondo è mezzo punto percentuale di un core. Il guadagno vero è sul disco e sulla leggibilità dei dossier, non sulla velocità. La modalità vale per tutta la sessione: cambiarla richiede il riavvio."/>
|
||||
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<RadioButton x:Name="ModeTrainingRadio" Content="Addestramento"
|
||||
GroupName="SessionMode" IsChecked="True"
|
||||
Checked="SessionModeRadio_Checked"
|
||||
ToolTip="Registrazione completa: dossier con ogni poll, registro della strategia, dettaglio esteso."/>
|
||||
<RadioButton x:Name="ModeRaceRadio" Content="Gara" Margin="16,0,0,0"
|
||||
GroupName="SessionMode"
|
||||
Checked="SessionModeRadio_Checked"
|
||||
ToolTip="Solo ciò che serve a puntare. Restano puntate, esiti, errori e lo storico delle aste concluse."/>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock x:Name="ModeCurrentText" Margin="0,8,0,0"
|
||||
Foreground="{DynamicResource Brush.TextMuted}" FontSize="11.5"/>
|
||||
<TextBlock x:Name="ModeRestartNotice" Margin="0,6,0,0" Visibility="Collapsed"
|
||||
Foreground="{DynamicResource Brush.Warning}" TextWrapping="Wrap"
|
||||
Text="La modalità scelta si applica al prossimo avvio: salva e riavvia l'applicazione."/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- SEZIONE 0-quater: Fascia oraria e pulizia dell'elenco -->
|
||||
<Border Style="{StaticResource CardBlock}">
|
||||
<StackPanel>
|
||||
<ctl:HelpHeader Title="Fascia oraria sospesa e pulizia dell'elenco"
|
||||
Margin="0,0,0,14"
|
||||
Help="Fascia oraria: su 6060 aste concluse la stessa asta chiude al 4,6% del valore alle 12 e al 5,3% fra le 10 e le 13, ma all'8,6% a mezzanotte e al 9,7% alle 9 — quasi il doppio, e con 26-29 puntate per vincere invece di 21-24. Nella fascia le puntate si sospendono ma l'asta resta Attiva e riprende da sola. Inizio incluso, fine esclusa; una fascia a cavallo di mezzanotte (22-6) funziona; inizio uguale a fine spegne il filtro. Pulizia dell'elenco: le aste concluse spariscono da sole dal monitor, tranne quelle che vale la pena riguardare."/>
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
||||
<CheckBox x:Name="QuietHoursCheckBox" Content="Sospendi le puntate dalle" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="QuietHoursStartTextBox" Text="0" Width="40" Margin="8,0" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="alle" VerticalAlignment="Center" Foreground="{DynamicResource Brush.Text}"/>
|
||||
<TextBox x:Name="QuietHoursEndTextBox" Text="10" Width="40" Margin="8,0" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="(ore, 0-23)" VerticalAlignment="Center" Foreground="{DynamicResource Brush.TextMuted}"/>
|
||||
</StackPanel>
|
||||
|
||||
<CheckBox x:Name="AutoRemoveFinishedCheckBox" Content="Togli da sole le aste concluse dall'elenco" Margin="0,4"/>
|
||||
<CheckBox x:Name="AutoRemoveKeepMyBidsCheckBox" Content="…ma trattieni quelle su cui ho puntato" Margin="20,2,0,0"
|
||||
ToolTip="Sono le uniche con il costo reale dentro: restano per controllarle a mano."/>
|
||||
<CheckBox x:Name="AutoRemoveKeepWonCheckBox" Content="…ma trattieni quelle vinte" Margin="20,2,0,0"
|
||||
ToolTip="C'è da confermare l'acquisto su Bidoo: una vittoria sparita dall'elenco è il modo più semplice di dimenticarsene."/>
|
||||
<CheckBox x:Name="AutoRemoveKeepUnclearCheckBox" Content="…ma trattieni quelle di cui non si è vista la fine" Margin="20,2,0,0"
|
||||
ToolTip="Esito da controllare: sono esattamente quelle da guardare."/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- SEZIONE 0-bis: Sessione / Autenticazione -->
|
||||
<Border Style="{StaticResource CardBlock}">
|
||||
<StackPanel>
|
||||
|
||||
Reference in New Issue
Block a user