Есть ли способ просмотреть кеш для всех объектов в кеше? Я динамически создаю объекты, и мне нужно периодически просматривать список, чтобы очистить объекты, которые я больше не использую.Список объектов в httpcontext.current.cache
ответ
Да, вы можете либо индекс на основе ключа кэша, или вы можете перемещаться по содержимому:
For Each c In Cache
' Do something with c
Next
' Pardon my VB syntax if it's wrong
Почему downvote? Я не могу улучшить, если вы не скажете мне, где я ошибаюсь. –
Я не спускал вниз, но я должен посмотреть на другие ответы, чтобы определить, что такое переменная «c» и как ее использовать в вашем примере. Я думаю, что вы ответили на суть вопроса, но это то, как перечислять объекты в кеше. – slolife
Спасибо за информацию. –
Вы можете перечислить через объекты:
System.Web.HttpContext.Current.Cache.GetEnumerator()
Вот В.Б. чтобы перебирать кеш и возвращать представление DataTable.
Private Function CreateTableFromHash() As DataTable
Dim dtSource As DataTable = New DataTable
dtSource.Columns.Add("Key", System.Type.GetType("System.String"))
dtSource.Columns.Add("Value", System.Type.GetType("System.String"))
Dim htCache As Hashtable = CacheManager.GetHash()
Dim item As DictionaryEntry
If Not IsNothing(htCache) Then
For Each item In htCache
dtSource.Rows.Add(New Object() {item.Key.ToString, item.Value.ToString})
Next
End If
Return dtSource
End Function
Поскольку вы потенциально хотите быть удаление элементов из Cache
объекта, это не очень удобно перебирать над ним (как IEnumerable
), так как это не позволяет удаление в процессе итерации. Однако, учитывая, что вы не можете получить доступ к элементам по индексу, это единственное решение.
Немного LINQ может, однако, упростить проблему. Попробуйте что-то вроде следующего:
var cache = HttpContext.Current.Cache;
var itemsToRemove = cache.Where(item => myPredicateHere).ToArray();
foreach (var item in itemsToRemove)
cache.Remove(itemsToRemove.Key);
Обратите внимание, что каждый item
в итерации типа DictionaryEntry
.
Jeff, вы действительно должны искать зависимости для ваших кеш-предметов. Это правильный способ сделать это. Логически группируйте свои кэшированные данные (элементы) и устанавливайте зависимости для своих групп. Таким образом, когда вам нужно истечь всю группу, вы затрагиваете такую общую зависимость, и все они ушли.
Я не уверен, что понимаю Список объектов часть.
var keysToClear = (from System.Collections.DictionaryEntry dict in HttpContext.Cache
let key = dict.Key.ToString()
where key.StartsWith("Something_")
select key).ToList();
foreach (var key in keysToClear)
{
HttpContext.Cache.Remove(key);
}
Это может быть немного поздно, но я использовал следующий код легко перебрать все элементы кэша и выполнять некоторые пользовательскую логику для удаления элементов кэша, которые содержат определенную строку в их именах.
Я представил обе версии кода в VB.Net, а также C#.
VB.Net Версия
Dim cacheItemsToRemove As New List(Of String)()
Dim key As String = Nothing
'loop through all cache items
For Each c As DictionaryEntry In System.Web.HttpContext.Current.Cache
key = DirectCast(c.Key, String)
If key.Contains("prg") Then
cacheItemsToRemove.Add(key)
End If
Next
'remove the selected cache items
For Each k As var In cacheItemsToRemove
System.Web.HttpContext.Current.Cache.Remove(k)
Next
C# Version
List<string> cacheItemsToRemove = new List<string>();
string key = null;
//loop through all cache items
foreach (DictionaryEntry c in System.Web.HttpContext.Current.Cache)
{
key = (string)c.Key;
if (key.Contains("prg"))
{
cacheItemsToRemove.Add(key);
}
}
//remove the selected cache items
foreach (var k in cacheItemsToRemove)
{
System.Web.HttpContext.Current.Cache.Remove(k);
}
- 1. Альтернатива HttpContext.Current.Cache
- 2. HttpContext.Current.Cache производительность
- 3. Понимание HttpContext.Current.Cache
- 4. Использование HttpContext.Current.Cache?
- 5. Является ли HttpContext.Current.Cache потокобезопасным?
- 6. Сфера применения HttpContext.Current.Cache
- 7. Найти определенное значение в HttpContext.Current.Cache
- 8. HttpContext.Current.Cache с балансировкой нагрузки?
- 9. Get AbsoluteExpiration of HttpContext.Current.Cache
- 10. Использование «HttpContext.Current.Cache» безопасно
- 11. Как HttpContext.Current.Cache сохраняет объекты в памяти?
- 12. Intersect список список объектов и список объектов
- 13. HttpContext.Current.Cache VS. Производительность таблицы SQL
- 14. Является ли System.Web.Hosting.HostingEnvironment.Cache равным HttpContext.Current.Cache?
- 15. Список объектов, влияющих на список других объектов
- 16. Convert Список массивов объектов в список объектов в Java
- 17. Список объектов в Java
- 18. InvalidCastException в список объектов
- 19. Добавление объектов в список
- 20. Collectors.groupingВойти в список объектов?
- 21. Добавление объектов в список?
- 22. Подсчет объектов в список
- 23. Список объектов в JSON
- 24. Список объектов
- 25. xml Deserialize список объектов, содержащих список объектов в C#
- 26. список Отображение объектов Dict в новый список Словаре объектов
- 27. Как добавить список родительских объектов в список дочерних объектов
- 28. RxJava: Как преобразовать Список объектов в список других объектов
- 29. список объектов, содержащих списки объектов
- 30. Как преобразовать список объектов в очередь объектов
Спасибо всем за удивительным обратной связи. Никогда не думал, что это будет много хорошего. Упреки для всех! Спасибо – Jeff