Stiamo progettando un'applicazione enterprise che memorizza nella cache molti dati dal back-end. Agli utenti è consentito aprire un numero arbitrario di finestre di app e ciascuna carica i propri dati e li memorizza nella cache. Per gestire in qualche modo il consumo di memoria e prevenire la diminuzione generale delle prestazioni del sistema operativo, abbiamo deciso di scrivere un gestore della cache che monitorerà automaticamente il footprint della memoria dell'app e rimuoverà i dati dalla cache quando necessario.Strategia per la gestione del consumo di memoria
Quindi il problema è che abbiamo difficoltà ad identificare se è il momento di liberare memoria. Attualmente utilizziamo un approccio molto semplice: iniziamo semplicemente a buttar via la roba dalla cache quando l'utilizzo della memoria delle app supera l'80% della memoria fisica.
Esistono pratiche alternative (alternative?) Per affrontare questo tipo di problema?
Per memoria fisica disponibile intendo memoria libera. So che GC non può essere completamente fidato quando si tratta di de-allocazione di oggetti tempestiva, ma finora durante i nostri test non è stato un problema. Inoltre, le finestre separate sono ospitate in un unico processo di Windows, quindi non ci si deve preoccupare di condividere la cache tra di esse. In che modo il sistema operativo segnala la memoria insufficiente? Esiste comunque la possibilità di intercettare quel segnale in .Net? –
Esiste un'API per questo: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366541(v=vs.85).aspx Ma quello che Windows pensa sia "basso" potrebbe non essere quello che volere. È una soglia arbitraria .; Se dici "Consumiamo fino all'80% di memoria libera", la memoria non è più libera. Quindi questa definizione non ha senso. Stai cambiando il denominatore consumando memoria. – usr
Mi dispiace, il mio male per quanto riguarda la dichiarazione di utilizzo della memoria. L'ho corretto nella domanda. –