J'essaie donc d'introduire un cache dans mon application Asp.Net. Les nouvelles données pour l'utilisateur sont renvoyées à partir de la base de données sous la forme de grands ensembles de données. Chaque fois qu'un utilisateur demande des données, j'insère cet ensemble de données dans le HttpRunTime.Cache
. En ce moment je fixe leur temps de mise en cache à 2-3 heures. Et ce sont vraiment de grands ensembles de données et je les mets en cache assez fréquemment avec des clés différentes. Ce qui m'inquiète, ce sont les conséquences de la fuite de mémoire. Est-ce qu'Asp.Net prendrait soin des données excessives dans le cache et l'enlèverait? Aussi, lorsqu'un élément mis en cache est supprimé par Asp.Net ou par moi en utilisant Cache.Remove()
, est-ce que seule la référence à l'ensemble de données est supprimée ou l'ensemble de données est également récupéré dans la mémoire? Existe-t-il un scénario dans lequel les ensembles de données peuvent être «supprimés» du cache mais toujours présents dans la mémoire, ce qui crée des problèmes de performances? Existe-t-il un moyen de les "collecter" explicitement si c'est le cas?Asp.Net Caching et fuites de mémoire lors de la suppression des éléments du cache
1
A
Répondre
5
Les éléments placés dans le cache ne sont pas garantis, le cadre efface le cache s'il manque de mémoire. Vous pouvez spécifier une priorité pour indiquer quels éléments doivent être automatiquement effacés en premier. Quant à savoir si la mémoire sera libérée, tant que les éléments sont gérés et que vous ne gardez pas de référence ailleurs dans l'application, le garbage collector libérera la mémoire une fois le délai d'expiration du cache expiré (ou manuellement le retirer du cache).
Bien sûr, la suppression du cache ne garantit pas que la mémoire physique sera libérée, car cela ne se produit que la prochaine fois que le garbage collector est exécuté.
Y a-t-il donc un moyen de libérer de la mémoire de manière explicite avant de m'abattre? –
Vous n'avez pas besoin de si la mémoire devient faible et qu'il y a des éléments dans le cache, les éléments seront automatiquement supprimés, à quel point, étant donné que la mémoire est insuffisante, le Garbage Collector se déclenchera. – Tetraneutron
Ok. Ainsi, le .Net Framework garantit que la mise en cache ne créera jamais de problèmes de mémoire. –