C'è un modo per esaminare la cache per tutti gli oggetti nella cache? Sto creando oggetti dinamicamente e ho bisogno di scorrere periodicamente l'elenco per eliminare gli oggetti che non uso più.Elenco di oggetti in httpcontext.current.cache
risposta
Sì, è possibile indice basato sulla chiave di cache, oppure è possibile scorrere i contenuti:
For Each c In Cache
' Do something with c
Next
' Pardon my VB syntax if it's wrong
Perché il downvote? Non posso migliorare se non mi dici dove mi sbaglio. –
Non ho fatto down, ma devo guardare altre risposte per determinare quale sia la variabile "c" e come usarla, nel tuo esempio. Penso che tu abbia risposto al cuore della domanda, che è come elencare gli oggetti nella cache. – slolife
Grazie per le informazioni. –
è possibile enumerare attraverso gli oggetti:
System.Web.HttpContext.Current.Cache.GetEnumerator()
Ecco un VB funzione per scorrere la cache e restituire una rappresentazione 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
Dal momento che si vuole essere potenzialmente la rimozione di elementi dall'oggetto Cache
, non è terribilmente comodo per scorrere su di esso (come IEnumerable
), dal momento che questo non consente la rimozione durante il processo di iterazione. Tuttavia, dato che non è possibile accedere agli elementi per indice, è l'unica soluzione.
Un po 'di LINQ può tuttavia semplificare il problema. Provare qualcosa di simile al seguente:
var cache = HttpContext.Current.Cache;
var itemsToRemove = cache.Where(item => myPredicateHere).ToArray();
foreach (var item in itemsToRemove)
cache.Remove(itemsToRemove.Key);
Nota che ogni item
nell'iterazione è di tipo DictionaryEntry
.
Jeff, dovresti davvero cercare le dipendenze per gli elementi memorizzati nella cache. Questo è il modo corretto di farlo. Raggruppa in modo logico i tuoi dati (elementi) e le dipendenze di impostazione per i tuoi gruppi. In questo modo quando hai bisogno di espirare l'intero gruppo tocchi una dipendenza così comune e se ne sono andati tutti.
Non sono sicuro di aver compreso l'elenco di oggetto.
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);
}
Questo può essere un po 'in ritardo, ma ho usato il seguente codice per scorrere facilmente sopra tutti gli elementi della cache ed eseguire una logica personalizzata per la rimozione di elementi della cache che contengono una certa stringa nel loro nome.
Ho fornito entrambe le versioni di codice in VB.Net e C#.
VB.Net Versione
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# versione
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 è thread-safe?
- 2. HttpContext.Current.Cache vs. HttpRuntime.Cache
- 3. Rappresenta un elenco di oggetti in XSD
- 4. Elenco aggregato di oggetti in Java
- 5. R: girando voci di elenco in oggetti
- 6. trama Memorizzazione di oggetti in un elenco
- 7. Elenco generico di oggetti generici
- 8. RxJava: Come convertire un elenco di oggetti in un elenco di altri oggetti
- 9. elenco di oggetti da Collections.map
- 10. Elenco oggetti AWS S3
- 11. utilizzando LINQ per raggruppare un elenco di oggetti in un nuovo elenco raggruppato di elenco degli oggetti
- 12. Elenco cast di tipo anonimo a elenco di oggetti dinamici
- 13. Rimozione di un elenco di oggetti da un altro elenco
- 14. Memorizzazione di un elenco di oggetti
- 15. MVC - Modifica di un elenco di oggetti
- 16. Ordinamento di un elenco di oggetti personalizzati
- 17. Stampa di un elenco di oggetti
- 18. Linq query a Elenco di oggetti contenenti un elenco di oggetti
- 19. Come raggruppare oggetti simili in un elenco?
- 20. Algoritmo per ordinare un elenco di oggetti
- 21. elenco di oggetti da JSON con Python
- 22. Elenco di oggetti con un attributo unico
- 23. Ricerca in un elenco di oggetti in Python
- 24. Spalato più stringhe in un elenco di oggetti in C#
- 25. Struttura JSON per elenco di oggetti
- 26. String.Join su un elenco di oggetti
- 27. popolamento datagridview con elenco di oggetti
- 28. C# combobox vincolante per elenco di oggetti
- 29. Come smaltire un elenco di oggetti monouso?
- 30. Come iterare Elenco di array di oggetti e impostare su un altro elenco di oggetti in java 8?
Grazie a tutti per il tuo feedback impressionante. Non avrei mai pensato che ci sarebbero stati molti buoni modi. Upvotes per tutti! Grazie – Jeff