1.6 KiB
1.6 KiB
WIP - Refactor Simulatore
Analisi Ereditarietà
- Simula.cs -> Generic (Generic.Protected.cs / Generic.Public.cs)
- Classe
simPar: Gestisce durata e attesa eventi simulati
Criticità Riscontrate (CPU & Context Switch)
- Sync-over-Async: Uso massiccio di
Task.Run(...).GetAwaiter().GetResult()inSimula_LoadeProcessDataSync. Questo blocca i thread e aumenta il context switching. - Polling Frequente:
processVHF(): Gestisce i decrementi dei timer basandosi superiodoMSec.getDynData(): Genera dati random walk/level basandosi suwaitSimPar.
- Operazioni I/O Sincrone: Uso di
HttpService.CallUrlall'interno di cicli di simulazione/polling.
Strategie di Intervento Applicate
1. Jittering (Disallineamento) [DONE]
- Aumentato jitter di avvio fino a 10s nel costruttore.
- Applicato rumore statistico (±15% + jitter extra) al
periodoMSecper evitare la sincronizzazione delle VM.
2. Throttling e Dirty Check [DONE]
- Contapezzi: Implementato
lastSentPzCountper inviare dati solo se il valore è effettivamente cambiato. - Bitmap: Implementato throttling su
decodeToBaseBitmap(limite 500ms) per ridurre chiamate HTTP sincrone e calcoli pesanti.
3. Refactor Async/Sync [DONE]
- Eliminato l'uso di
.GetAwaiter().GetResult()inSimula_LoadeProcessDataSync. - Convertito il caricamento e la sincronizzazione in task "fire-and-forget" controllati (
_ = Task.Run(...)), liberando immediatamente i thread di polling/sistema.
Stato Finale
- Implementazione completa delle fasi di refactor su
Simula.cs. - Fase di test in ambiente di staging/produzione per monitoraggio CPU Proxmox.