Question

Est-il possible de regarder à travers le cache pour tous les objets du cache? Je crée dynamiquement des objets et je dois aller régulièrement dans la liste pour purger les objets que je ne suis plus à l'aide.

Était-ce utile?

La solution

Oui, vous pouvez indexer en fonction de la clé de cache, ou vous pouvez vous itérer sur le contenu:

For Each c In Cache
    ' Do something with c
Next
' Pardon  my VB syntax if it's wrong

Autres conseils

        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);
        }

Vous pouvez énumérer les objets:

 System.Web.HttpContext.Current.Cache.GetEnumerator()

Voici une fonction de VB pour itérer à travers le cache et retourner une représentation 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

Cela peut être un peu en retard, mais j'utilisé le code suivant pour itérer facilement sur tous les éléments du cache et effectuer une logique personnalisée pour le retrait des éléments du cache qui contiennent une certaine chaîne en leur nom.

J'ai fourni les deux versions du code VB.Net ainsi que C #.

VB.Net Version

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);
   }

Jeff, vous devriez regarder vraiment les dépendances pour vos articles mis en cache. C'est la bonne façon de le faire. Logiquement regroupez vos données mises en cache (éléments) et les dépendances de configuration pour vos groupes. De cette façon, lorsque vous avez besoin d'expirer tout le groupe que vous touchez une telle dépendance commune et ils sont tous partis.

Je ne suis pas sûr que je comprends Liste des objets partie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top