У меня есть места, где реализация какого-то кеша может быть полезна. Например, в случаях выполнения поиска ресурсов на основе пользовательских строк, поиска имен свойств с использованием отражения или наличия только одного PropertyChangedEventArgs
для каждого имени свойства.C#: Как реализовать интеллектуальный кеш
Простой пример последнего:
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);
}
}
Но это будет работать хорошо? Например, если бы у нас была вся загрузка разных имен свойств, это означало бы, что у нас будет огромный кеш, в котором никогда не будет сбора мусора или чего-то еще. Я представляю, что то, что кэшируется, - это большие значения, и если приложение является долговременным, это может стать проблемой ... или что вы думаете? Как должен быть реализован хороший кеш? Является ли это достаточно хорошим для большинства целей? Любые примеры некоторых хороших реализаций кэша, которые не так сложно понять или слишком сложно реализовать?
«* Есть только два жестких вещей в области компьютерных наук:. Кэш недействительности и называющие вещи *» - Фил Karlton – JulianR
Это не стоит весь ответ, но это конкретная реализация будет неэффективно выглядят в многопоточной среде. По минимальному минимуму вам нужно заблокировать доступ к 'cache' в' GetPropertyChangedEventArgs() '. Просто пытаюсь помочь любому, кто приходит и копирует это. – aaronburro