Ciao,
ho verificato attentamente e non viene memorizzata nessun'altra voce che assomigli neanche lontanamente al nome della mia chiave.
Mmmmh. No, io volevo sapere alla seconda richiesta, quando vai a recuperare l'oggetto dalla cache, se stai usando la stessa chiave. Hai scritto:
passo ad un'altra procedura e la chiave c'è, ma quando richiamo nuovamente la procedura, prima di eseguire "CacheClass.AddToMyCache(...)", la chiave non esite più.
La mia idea è che quando richiami nuovamente la procedura tu stia usando un'altra chiave che ti dà l'illusione che l'oggetto sia stato rimosso dalla cache.
L'oggetto rimane in cache per 60000 secondi, come da tua disposizione. Può sparire solo dopo che questo tempo è trascorso, se riavii l'applicazione, o se il server ha talmente poca memoria RAM residua che è costretto a svuotare la cache.
Facciamo così, ti mando un progetto funzionante, così puoi esaminarlo e vedere in cosa si differenzia dal tuo.
Ho adottato l'
esempio che ti avevo mandato. Scarica il progetto da qui:
https://1drv.ms/u/s!Ao4rhSdtDw8rge5aSI7d16pwCJ-ZEwE guarda in particolare il codefile della pagina Default.aspx.
protected void Page_Load(object sender, EventArgs e)
{
//Il valore della chiave qui lo imposto staticamente
//ma lo posso comporre in base ai filtri selezionati
var chiaveCache = "Risultati";
var dataTable = GenericCacheClass.GetCacheItem(chiaveCache)?.Value as DataTable;
if (dataTable == null)
{
//Il datatable non si trovava in cache, quindi devo ottenerlo inviando una query al database
dataTable = RecuperaDatiDalDatabase();
//lo metto in cache per 20 secondi (ma può essere 20 minuti, 6 ore o altro valore adeguato)
GenericCacheClass.AddToMyCache(chiaveCache, dataTable, null, TimeSpan.FromSeconds(20));
}
//Infine, sia che il datatable sia stato recuperato dalla cache che dal database,
//lo metto in binding con un datagrid
gridView1.DataSource = dataTable;
gridView1.DataBind();
}
private DataTable RecuperaDatiDalDatabase()
{
//In questo esempio non recupero i valori dal database ma creo un DataTable a mano
//Nell'applicazione reale qui bisognerà collegarsi al db e inviare la query
var dt = new DataTable();
dt.Columns.Add("Nome", typeof(string));
dt.Columns.Add("UltimoAggiornamento", typeof(DateTime));
//Aggiungo giusto una riga con la data/ora corrente
//Continuando ad aggiornare la pagina, si vedrà sempre la stessa data/ora per 20 secondi
//tempo di durata della cache. Dopodiché il valore verrà espulso automaticamente dalla
//cache e andremo a rieseguire questa funzione per recuperare di nuovo i dati dal db
dt.Rows.Add("Mario", DateTime.Now);
return dt;
}
ciao,
Moreno
Modificato da BrightSoul il 26 maggio 2018 12.23 -