Sono bloccato in uno scenario. Il mio codice è come qui di seguito:Oggetto cache con ObjectCache in .Net con scadenza
Update: la sua non su come utilizzare cache di dati, io sto già usando e il suo funzionamento, la sua di espandere in modo che il metodo non fanno chiamata tra il tempo di scadenza e ottenere nuovi dati da una fonte esterna
object = (string)this.GetDataFromCache(cache, cacheKey);
if(String.IsNullOrEmpty(object))
{
// get the data. It takes 100ms
SetDataIntoCache(cache, cacheKey, object, DateTime.Now.AddMilliseconds(500));
}
questo modo l'utente ha colpito la cache e ottenere i dati da esso se la voce scadere chiama e ottenere i dati dal servizio e salvarlo in caso, t egli problema è, quando mai c'è una richiesta in sospeso (richiesta in corso) il servizio invia un'altra richiesta perché l'oggetto è scaduto. in finale ci dovrebbero essere max 2-3 chiamate/secondi e ci sono 10-20 chiamate al secondo al servizio esterno.
Esiste un modo ottimale per farlo in modo che non vi siano conflitti tra le richieste di tempo oltre alla creazione di una propria classe personalizzata con array e timestamp, ecc.?
btw il codice risparmio per la cache è-
private void SetDataIntoCache(ObjectCache cacheStore, string cacheKey, object target, DateTime slidingExpirationDuration)
{
CacheItemPolicy cacheItemPolicy = new CacheItemPolicy();
cacheItemPolicy.AbsoluteExpiration = slidingExpirationDuration;
cacheStore.Add(cacheKey, target, cacheItemPolicy);
}
Verificare questo. Penso che risolverà il tuo problema. http://stackoverflow.com/questions/26581065/memory-cache-in-web-api –
ciao, almeno quello che ho capito, sto già usando la classe e funziona bene, non è su come usarlo, anche aggiornato la mia domanda – kawafan
@kawafan, Risposta suggerita da Kari è corretta, Lazy supporta l'esecuzione singleton e gestisce il blocco. Non si tratta di utilizzare la classe o enumerabile, si tratta di utilizzare Lazy . –