Я пишу Консольное приложение на C#, в котором я хочу кэшировать определенные элементы за определенное время (скажем, 1 час). Я хочу, чтобы элементы, которые были добавлены в этот кеш, автоматически удалялись после их истечения. Есть ли встроенная структура данных, которую я могу использовать? Помните, что это консольное приложение, а не веб-приложение.C# Коллекция, срок действия которой истекает
ответ
Я не знаю никаких объектов в BCL, которые делают это, но я уже писал подобные вещи раньше.
Вы можете сделать это довольно легко, просто включив System.Threading.Timer внутри вашего класса кеширования (без зависимостей web/winforms) и сохраняя время (или последнее время) на ваших объектах. Просто проверьте таймер каждые несколько минут и удалите объекты, срок действия которых истекает.
Однако будьте внимательны к событиям на ваших объектах. У меня была такая система, и я не был очень осторожен, чтобы отказаться от подписки на события на моих объектах в кеше, что мешало тонкой, но неприятной утечке памяти с течением времени. Это может быть очень сложно отладить.
Вам действительно нужно удалить их из кеша в это время? Или просто, что будущие запросы к кешу для этого элемента должны возвращать null после определенного времени?
Чтобы сделать первый, вам понадобится какой-то фоновый поток, который периодически чистил кеш. Это было бы необходимо, только если вы были обеспокоены потреблением памяти или чем-то еще. Если вы просто хотите, чтобы данные истекали, это было бы легко сделать.
Тривиально создавать такой класс.
class CachedObject<TValue>
{
DateTime Date{get;set;}
TimeSpan Duration{get;set;}
TValue Cached{get;set;}
}
class Cache : Dictionary<TKey,TValue>
{
public new TValue this(TKey key)
{
get{
if (ContainsKey(key))
{
var val = base.this[key];
//compare dates
//if expired, remove from cache, return null
//else return the cached item.
}
}
set{//create new CachedObject, set date and timespan, set value, add to dictionary}
}
Включить свойство EXPIRATIONDATE в объекте, который вы будете кэширования (вероятно обертку вокруг вашего реального объекта) и установить его истекает через час в его конструкторе. Вместо удаления элементов из коллекции обращайтесь к коллекции с помощью метода, который отфильтровывает истекшие элементы. Или создайте собственную коллекцию, которая сделает это автоматически. Если вам нужно фактически удалить элементы из кеша, ваша пользовательская коллекция может вместо этого очищать истекшие элементы при каждом вызове одному из своих членов.
Его уже в BCL. Его просто не там, где вы его найдете: вы можете использовать System.Web.Caching и из других приложений, а не только в ASP.NET.
This search on google links to several resources about this.
- 1. Срок действия визы истекает?
- 2. Истекает срок действия
- 3. Срок действия кеша истекает?
- 4. Страницы, срок действия которых истекает
- 5. Полосы - перенаправление, срок действия истекает
- 6. Обнаружение SSL-сертификатов, срок действия которых истекает
- 7. Срок действия cookie истекает в минутах/часах, срок действия которых истекает в днях
- 8. Yahoo! Срок действия API-интерфейса Messenger истекает
- 9. Срок действия экземпляра Amazon AWS истекает
- 10. API libspotify: когда истекает срок действия пароля?
- 11. Как истекает срок действия Guava в CacheBuilder?
- 12. Quickblox - интеграция аутентификации - срок действия пароля истекает?
- 13. Когда истекает срок действия статуса JSF?
- 14. Узнайте, когда срок действия сертификата пользователя истекает.
- 15. Когда истекает срок действия кэшированного Big Query?
- 16. Как истекает срок действия сеанса Google Analytics?
- 17. Facebook токен доступа истекает срок действия безопасности
- 18. Приложение ClickOnce, срок действия которого истекает
- 19. Срок действия Facebook-приложений oauth tokens истекает?
- 20. Срок действия токена доступа приложения Facebook истекает?
- 21. Истекает ли срок действия протокола S3Connection?
- 22. Кролики фибоначчи, срок действия которых истекает
- 23. Когда истекает срок действия токена доступа Deezer?
- 24. Срок действия сертификата разработчика IOS истекает
- 25. Сессионный файл cookie, срок действия которого истекает
- 26. срок действия таймера истекает, теперь что?
- 27. Истекает срок годности токена
- 28. Срок действия сертификата разработчика IOS истекает до истечения срока действия
- 29. Необходимо создать покупку Android In-App, срок действия которой истекает через 2 месяца. Каковы варианты?
- 30. Как сделать заявку, срок действия которой истекает в определенное время в iphone?
использование MemoryCache вместо http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache(v=vs.100).aspx см: HTTP: // StackOverflow .com/a/793720/303290 tl; dr: «если объекты Cache используются вне ASP.NET, системная память, зарезервированная для объектов Cache, не будет выпущена» – mbx