Utilisation de variables statiques au lieu de l'état de l'application dans ASP.NET
Je plan à utiliser des variables statiques au lieu de l'état de l'Application dans ASP.NET et je me demande si c'est la bonne approche:
[Global.asax.cs]
...
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
//Code that runs on application startup
}
...
private static Dictionary<string, object> cacheItems = new Dictionary<string, object>();
private static object locker = new object();
public static Dictionary<string, object> CacheItems
{
get
{
lock (locker)
{
return cacheItems;
}
}
set
{
lock (locker)
{
cacheItems = value;
}
}
}
public static void RemoveCacheItem(string key)
{
cacheItems.Remove(key);
}
...
}
Comme vous pouvez le voir j'utilise automatiquement créé Mondiale.asax (et le code derrière) fichier. J'ai ajouté quelques les variables et méthodes statiques. Je peux les utiliser après dans cette manière:
[some .cs file]
foreach(KeyValuePair<string, object> dictItem in Global.CacheItems)
{
...
Est-ce la bonne manière ou devrais-je créer une nouvelle classe à la place Mondiale actuelle? Si je dois créer la nouvelle classe comment puis-je faire et où?
source d'informationauteur tesicg
Vous devez vous connecter pour publier un commentaire.
Ce que dit Microsoft
référence : http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607
Mon expirience
La principale différence entre les variables et l'état de l'Application, c'est que l'état de l'Application est le même sur tous les threads et des piscines, mais la statique est la même que pour la piscine.Après de nouveaux tests, je vois que l'état de l'Application variables sont les mêmes que les variables statiques, et ils ont juste référence à une variable statique sur l'application, et ils existent pour des raisons de compatibilité, microsoft dit
Si vous avez des 4 piscines de l'exécution de votre site web (jardin), alors vous avez 4 séries de différents statique de la mémoire.
Votre code
Sur votre code, vous avez le bug de la façon dont vous essayez d'accéder à votre dictionarry de données, et vous allez avoir des erreurs dans le web réel. La présente partie du code est de verrouiller la variable de l'intégralité du Dictionnaire, mais ne pas verrouiller le changement que vous allez faire lorsque vous l'utilisez.
La bonne approche est de verrouiller toutes les actions d'ajouter/supprimer jusqu'à ce que vous faites, par exemple.
De l'autre main lorsque vous manipulez des données sur l'état de l'application, vous devez utiliser les
globalverrouillage deApplication.Lock();
etApplication.UnLock();
par exemplePour fermer avec un résultat:
Éviter l'état de l'Application et de n'utiliser que des variables statiques sur votre code.