Files
Mapo-IOB-WIN/wip.md
T

31 lines
1.6 KiB
Markdown

# 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.