Ho alcuni punti in cui l'implementazione di una sorta di cache potrebbe essere utile. Ad esempio, in caso di ricerche di risorse basate su stringhe personalizzate, ricerca di nomi di proprietà mediante reflection o per avere un solo PropertyChangedEventArgs
per nome proprietà.C#: Come implementare una cache intelligente
Un semplice esempio di l'ultimo:
public static class Cache
{
private static Dictionary<string, PropertyChangedEventArgs> cache;
static Cache()
{
cache = new Dictionary<string, PropertyChangedEventArgs>();
}
public static PropertyChangedEventArgs GetPropertyChangedEventArgs(
string propertyName)
{
if (cache.ContainsKey(propertyName))
return cache[propertyName];
return cache[propertyName] = new PropertyChangedEventArgs(propertyName);
}
}
Ma, sarà questo lavoro bene? Ad esempio, se avessimo un intero carico di diversi propertyNames, ciò significherebbe che ci ritroveremmo con una cache enorme che non sarebbe mai stata raccolta dalla spazzatura o altro. Sto immaginando se ciò che è memorizzato nella cache sono valori più grandi e se l'applicazione è di lunga durata, questo potrebbe finire come una specie di problema ... o cosa ne pensi? Come dovrebbe essere implementata una buona cache? Questo è abbastanza buono per la maggior parte degli scopi? Qualche esempio di alcune buone implementazioni della cache che non sono troppo difficili da comprendere o troppo complesse da implementare?
"* Ci sono solo due cose difficili in informatica:. Invalidazione della cache e le cose di denominazione *" - Phil Karlton – JulianR
Questo non vale una risposta intera, ma questa particolare implementazione sarebbe fallire in modo spettacolare in un ambiente multi-thread. Al minimo è necessario un blocco per l'accesso a 'cache' in' GetPropertyChangedEventArgs() '. Solo cercando di aiutare chiunque arrivi e copia-incolla questo. – aaronburro