2013-12-12 21 views
17

Dal docQual è la differenza tra "Set" e "Aggiungi" per ObjectCache?

Add (CacheItem, CacheItemPolicy): Quando sottoposto a override in una classe derivata, cerca di inserire una voce della cache nella cache come istanza CacheItem, e aggiunge dettagli su come la voce dovrebbe essere sfrattato. [1]

-

Set (CacheItem, CacheItemPolicy): Quando sottoposto a override in una classe derivata, inserisce la voce della cache nella cache come istanza CacheItem, specificando le informazioni su come l'entrata sarà sfrattati. [2]

vedo poca differenza nella formulazione (cerca di) e firma (set è un sub, add restituisce un valore booleano), ma non sono sicuro che uno dovrei usare e se c'è davvero qualcosa di diverso tra entrambi.

risposta

24

La differenza principale è che il metodo Add() tenta di inserire una cache senza sovrascrivere una voce di cache esistente con la stessa chiave.

Mentre il metodo Set() sovrascrive una voce di cache esistente con la stessa chiave. [Tuttavia, se la chiave per un elemento non esiste, l'inserimento verrà eseguito come una nuova voce della cache].

Sopra era la differenza in termini di funzionalità.

differenza sintattica:

Una significativa differenza sintattica è che il metodo Add() ritorna un valore booleano che è true se l'inserimento è riuscito, o false se v'è già una voce nella cache che ha la stessa chiave di voce . Il metodo Set() ha un tipo di ritorno void.

Un ultimo punto che l'implementazione interna del metodo Add() chiama in realtà la sua versione corrispondente del metodo AddOrGetExisting().

public virtual bool Add(CacheItem item, CacheItemPolicy policy) 
{ 
    return this.AddOrGetExisting(item, policy) == null; 
} 
+2

Risposta concisa perfetta su un paio di metodi un po 'oscuri. Questo è il motivo per cui io amo SO probabilmente mi hai risparmiato un'ora o cercando o testando. –

+1

Sembra che il metodo Aggiungi non crei un elemento di cache se esiste un altro elemento di cache con la stessa chiave! – Sunil

Problemi correlati