En C#, j'ai la syntaxe suivante extrêmement verbeux pour tirer une simple liste d'éléments à partir d'une base de données:Comment faire pour que la syntaxe de verrouillage cochée double soit moins verbeuse?
if (malls == null)
{
lock (_lock)
{
if (malls == null)
{
using (var session = NhibernateHelper.OpenSession())
{
malls = session.CreateCriteria<Mall>()
.AddOrder(Order.Asc("Name")).List<Mall>();
CacheManager.Set(CACHE_KEY, malls, TimeSpan.FromMinutes(CACHE_DURATION));
}
}
}
}
Je suis au courant des avantages de verrouillage revérifié et je soutiens fortement son utilisation, mais semble incroyablement verbeux. Pouvez-vous recommander des raccourcis de syntaxe ou des styles qui pourraient le nettoyer un peu?
Je serais intéressé par les avantages supposés de ce modèle. D'après mon expérience, les gens ont mal compris ce schéma et ses implications (par exemple, cela ne fonctionne pas de manière fiable sur Mono en raison de différences de modèles de mémoire). Je n'ai jamais vu ses avantages supposés à la hauteur de tous les problèmes qu'il provoque. – JaredPar
La méthode en question tirera environ 5000 enregistrements d'une base de données à mettre en mémoire cache. Il va être utilisé dans un site ASP.NET à fort trafic et peut être appelé de plusieurs centaines à plusieurs milliers de fois par seconde, donc je veux définitivement mettre en cache les données et en même temps éviter un autre thread re-tirant les données simplement parce que le La vérification null a échoué avant l'acquisition du verrou. En outre, en raison de l'accès lourd à la fonction, je ne peux pas simplement supprimer la première vérification nulle, car le verrouillage inutile qui en résulte enterrerait l'application. – Chris
@Chris, avez-vous ** prouvé ** c'est en fait un avantage pour votre application? Ou que l'utilisation d'un verrou simple est un problème? – JaredPar