Je dois stocker un ensemble de données en cache pour X min et quand il expire, je l'ai pour que la prochaine requête vérifie si le cache existe et puis va et récupère mettre à jour les données et définir le cache. Le problème est qu'un autre utilisateur entrera en ce moment et essaiera d'accéder à l'objet et provoquera une exception. Comment puis-je empêcher cela?Problème C# avec plusieurs utilisateurs tentant d'accéder à l'objet mis en cache
Répondre
Vous pouvez le faire en utilisant l'instruction lock en C#.
Vous avez besoin d'une variable d'objet utilisée comme "verrou" pour qu'un seul thread puisse y accéder à la fois.
Placez le verrou autour du code qui met à jour ou récupère l'objet de cache.
Voici une classe simple qui démontre ceci:
public class UpdateCache
{
private static object _myLockObject;
public static void UpdateCache()
{
lock(_myLockObject)
{
.. Update cache object
}
}
public static void LoadFromCache(string key)
{
lock(_myLockObject)
{
.. retrieve data from cache
}
}
}
Un modèle typique est d'encapsuler l'objet mis en cache dans une propriété. La propriété getter peut alors contrôler tous les accès à l'objet mis en cache.
private static object _locker = new object();
public static DataSet CachedDataSet
{
get
{
if (Cache["DataSetKey"] == null)
{
lock (_locker)
{
if (Cache["DataSetKey"] == null)
{
Cache["DataSetKey"] = CreateAndFillDataSet();
}
}
}
return (DataSet) Cache["DataSetKey"];
}
}
Ce code ne sera pas compilé, le getter n'a pas de retour. –
le downvote (pas le mien) est un peu dur cependant, clairement un oversite –
Attendez que l'objet privé ne soit pas statique aussi bien? – BlackTea
- 1. Mise en cache et évitement du contenu mis en cache
- 2. Clonage efficace des objets mis en cache
- 3. problème avec la mise en cache
- 4. Linq2SQL Les compteurs sont mis en cache?
- 5. Le contenu est mis en cache
- 6. Forcer gethostbyname non mis en cache()
- 7. Demandes de sécurité déclaratives - SecurityAction.Demand est-il mis en cache?
- 8. Les nœuds TreeView semblent être mis en cache
- 9. Les scripts échouent lorsque jQuery.js n'est pas mis en cache. En cache, les scripts s'exécutent correctement.
- 10. javascript ne peut pas être mis en cache?
- 11. Répertoire pour stocker les fichiers mis en cache dans Rails?
- 12. Modèles ActiveRecord mis en cache dans des tâches rake?
- 13. Problème de mise en cache CSS/Jscript
- 14. Comment passer des variables à du contenu mis en cache en PHP?
- 15. Problème avec KeyLogger en C#
- 16. Problème avec node.GetElementsByTagName en C#
- 17. Contrôle du cache des fichiers Web qui doivent déjà être mis en cache
- 18. Envoyer des emails à plusieurs utilisateurs en utilisant PHP/Javascript
- 19. problème avec rand() en C
- 20. problème avec le cache du navigateur
- 21. Plusieurs utilisateurs XDebug et PHP débogage
- 22. Flex Framework - Comment savoir si l'utilisateur utilise un cadre mis en cache?
- 23. Plusieurs-à-plusieurs avec "primaire"
- 24. Cache Sub Sonic 2.2? problème
- 25. Problème avec plusieurs vues modales
- 26. HTTP/1.1 Problème de cache-control sans cache
- 27. Pourquoi un Regexp mis en cache surclasse-t-il un Regexp compilé?
- 28. Problème avec les variables locales en C#
- 29. Problème avec la bibliothèque statique en C++
- 30. Gestion des mises à jour d'un DataTable mis en cache lorsque la session des utilisateurs contient des DataViews basées sur ce DataTable
Veuillez poster le code qui se casse. –