La memoria Cache o Simultanee Dizionario?

Sto cercando di implementare la memorizzazione nella cache a livello di richiesta per un Servizio WCF. Ogni richiesta di questo servizio esegue un gran numero di chiamate al database. Pensare di più dati i collezionisti. Abbiamo bisogno di permettere un agente di raccolta dati per accedere alle informazioni già recuperato da un precedente raccolta dati.

Stavo cercando di utilizzare la nuova .Net 4.0 Memoria cache per questo con la creazione di una specifica istanza per richiesta.

È una buona idea ? O devo semplicemente utilizzare un oggetto Dictionary ?

BTW : La raccolta dei dati sta per essere in parallelo, quindi non ci sarà più complessità intorno al blocco, ma non ho potuto usare le collezioni contemporanee per quello.

  • Aggiornamento – ho deciso di usare il Concorrente collezione, perché che i modelli di una mia esigenza di meglio a livello di sistema e di memoria cache.
  • A quanto ho capito il MemoryCache classe , è un processo di cache di livello..
  • o anche AppDomain livello, non testato.

 

One Reply
  1. 37

    Se non avete bisogno di un qualche tipo di scadenza logica, vorrei suggerire l’utilizzo di collezioni contemporanee. Si può facilmente implementare un ingresso singolo meccanismo di caching combinando ConcurrentDictionary e Lazy classi. Qui è un altro link Pigro e ConcurrentDictionary combinazione.

    Se hai bisogno i tuoi articoli per scadere, quindi è meglio utilizzare il built-in MemoryCache e implementare doppio controllo chiusura modello per garantire singola recupero di elementi della cache. Pronta con una implementazione di un doppio controllo di chiusura può essere trovato in Chiusura schema per il corretto uso dei .NET MemoryCache

    • Ok, pensavo la stessa linea, ma non riesco ancora a capire il “perché ?” di esso. Il MemoryCache mi fornisce alcune cache di funzioni specifiche, come AddOrGet. Farò perdere che quando mi muovo per le collezioni contemporanee. È una funzionalità di scadenza l’unico motivo per scegliere tra Concorrenti Collezione versus MemoryCache?
    • L’idea di utilizzare ConcurrentDictionary con Pigro è quello di garantire che è possibile recuperare gli elementi della cache una volta al dominio dell’applicazione e non cambia mai di loro. Se questo non è il caso MemoryCache è meglio. Tuttavia, se avete bisogno singola voce di recupero della logica, utilizzando ConcurrentDictionary è più appropriato perché MemoryCache.AddOrGetExisting metodo necessita di un valore e sarà ancora necessario implementare il blocco durante il recupero di questo valore. Ma con ConcurrentDictionary.GetOrAdd(Tchiave chiave, Func<TKey, TValue> valueFactory) combinato con Pigro, lasciando tutti che la chiusura roba quadro biblioteca.
    • Dal modo in cui se la cache elementi sono ben definiti prima di servizi inizio (ossia non di cache in modo dinamico) e si può tolarate il caricamento di tutti i dati presenti nella cache una volta, è possibile utilizzare il costruttore statico del tuo classi di servizio a carico di tali elementi nella cache. Questo è meglio, perché i costruttori statici sono garantiti per essere eseguito una volta al dominio di applicazione e prima di qualsiasi costruttore di istanza eseguito di quel tipo. È semplice.

Lascia un commento