Из запроса форума 🙂
ASP.NET включает в себя файл Global.asax, который предоставляет множество событий всего приложения, которые вы можете использовать для управления выполнением приложения.
Это также позволяет вам определять объекты в глобальном масштабе. Однако, предостережение … поскольку каждая страница на странице ASP.NET работает в своем собственном потоке, вам необходимо убедиться, что ваши объекты являются поточно-ориентированными для нескольких пользователей, запрашивающих ваш сайт.
Почему это важно? Представьте себе 2 запроса от пользователя A и пользователя B. Каждый запрос выполняется в отдельном потоке, и пользователь A манипулирует глобальным объектом в одном потоке, а пользователь B манипулирует одним и тем же объектом в другом потоке. В зависимости от Windows, они могут выполняться в любом порядке … это означает, что ваш глобальный объект не будет синхронизирован для обоих пользователей.
Поэтому, чтобы избежать этой сложности, используйте потокобезопасные объекты или, что представляет особый интерес, используйте хеш-таблицу в качестве потокобезопасного контейнера для ваших переменных:
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
using System; using System.Collections; namespace MyApp.Collections { public class globalVariableStore{ private Hashtable myCollection; private Hashtable threadSafeCollection; public globalVariableStore() { myCollection = new Hashtable(); threadSafeCollection = Hashtable.Synchronized(myCollection); } public void addVariable(string name, object value) { threadSafeCollection[name] = value; } public object retrieveVariable(string name) { return threadSafeCollection[name]; } } }
Затем вы можете определить экземпляр вашего globalVariableStore как глобально ограниченный, добавив строку в ваш файл global.asax: