# 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) 1. **Sync-over-Async**: Uso massiccio di `Task.Run(...).GetAwaiter().GetResult()` in `Simula_Load` e `ProcessDataSync`. Questo blocca i thread e aumenta il context switching. 2. **Polling Frequente**: - `processVHF()`: Gestisce i decrementi dei timer basandosi su `periodoMSec`. - `getDynData()`: Genera dati random walk/level basandosi su `waitSimPar`. 3. **Operazioni I/O Sincrone**: Uso di `HttpService.CallUrl` all'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 `periodoMSec` per evitare la sincronizzazione delle VM. ### 2. Throttling e Dirty Check [DONE] - **Contapezzi:** Implementato `lastSentPzCount` per 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()` in `Simula_Load` e `ProcessDataSync`. - Convertito il caricamento e la sincronizzazione in task "fire-and-forget" controllati (`_ = Task.Run(...)`), liberando immediatamente i thread di polling/sistema. ## Stato Finale - [x] Implementazione completa delle fasi di refactor su `Simula.cs`. - [ ] Fase di test in ambiente di staging/produzione per monitoraggio CPU Proxmox.