Я имею большую реализацию Singleton в приложении asp.net и хочу переместить свое приложение в веб-среду Сада IIS по некоторым причинам производительности.
CMIIW, перемещаясь в веб-Сад IIS с n рабочим процессом, будет одним одноэлементным объектом, созданным в каждом рабочем процессе, которые не делают его ни одним объектом больше потому что n> 1.
я могу сделать все те одноэлементные объекты, одиночный элемент снова в веб-Саду IIS?
Я не думаю, что вы сможете ( если только вы не сможете заставить рабочих IIS каким-то образом использовать объекты в общей памяти ).
Это проблема области видимости. Ваш экземпляр синглтона использует пространство процесса в качестве области видимости. И, как вы сказали, ваша реализация теперь охватывает несколько процессов. По определению, в большинстве операционных систем синглтоны будут привязаны к определенному пространству процессов, поскольку они привязаны к одному экземпляру класса или объекту.
Нужен ли вам действительно синглтон? Это очень важный вопрос, который нужно задать, прежде чем использовать этот паттерн. Как сказано в Википедии, некоторые считают его антипаттерном (или запахом кода и т.д.).
Примеры альтернативных конструкций, которые могут работать, включают...
Мне нравится вариант 3 для больших веб-сайтов. Служба Windows с компаньоном вообще очень полезна для больших веб-сайтов. Многие вещи, такие как отправка почты, пакетные задания и т.д., уже должны быть отделены от рабочего процесса обработки внешнего интерфейса. Вы можете поместить объект сервера singleton в этот процесс и использовать объекты клиента в рабочих процессах IIS.
Если ваш класс singleton работает с несколькими объектами, которые разделяют состояние или просто разделяют начальное состояние, то варианты 1 и 2 должны работать соответственно.
Редактировать
Из ваших комментариев следует, что первый вариант в виде распределенного кэша должен работать для вас.
Существует множество реализаций распределенного кэша.
PS. Поскольку вы специально ищете чат. Я бы определенно рекомендовал изучить Comet ( Реализация Comet для ASP.NET?, и WebSync, и т.д.)