Это нормально, чтобы хранить большие объекты (например, Java компонент) в переменной приложения?

StackOverflow https://stackoverflow.com/questions/2851251

Вопрос

Теперь я использую приложение прямо сейчас, которое создает и хранит соединение с локальным сервером XMPP в области приложения. Методы подключения хранятся в CFC, которое гарантирует, что Application.xmppcconnection подключен и авторизован каждый раз, когда он используется, и использует соединение для отправки живых событий для пользователей. Насколько я могу сказать, это работает нормально. Но это не было проверено под любым стрессом.

Мой вопрос: Будет ли эта настройка вызвать проблемы позже? Я спрашиваю только потому, что не могу найти доказательства других людей, использующих переменные приложений таким образом. Если бы я не использовал RILO, я бы использовал шлюз событий CF для достижения той же задачи.

Это было полезно?

Решение

Сам размер не проблема. Если вы должны были инициализировать один объект на запрос, вы сжечь намного больше памяти. Проблема в доступе.

Если у вас есть большое количество запросов, конкурирующих для того же объекта, вам нужно измерить время доступа для этого объекта против зуммы. Имейте в виду, что для объектов данных, более одного потока могут прочитать их. Мое понимание, однако, это то, что когда вызывается функция объекта, она блокирует этот объект к другим потокам, пока не возвращается функция.

Кроме того, если объект поддерживает состояние, необходимо учитывать, что делать, когда несколько потоков получают / устанавливают, что данные. Будете ли вы в конечном итоге с гоночными условиями?

Вы можете рассмотреть возможность обработки этого объекта в области сеанса, так что оно только создает только на каждого пользователя (кто, вероятно, будет делать только один или два одновременных запроса).

Другие советы

Конечно, вы можете использовать приложение для хранения этих компонентов, если они используются всеми пользователями в разных частях приложения. Теперь возможные вопросы:

  1. Размер компонента (ы)
  2. Время, необходимое для инициализации, если они установлены во время начала приложения
  3. Условия гонок между настройкой / получение состояний этих компонентов

Для первого, есть способы рассчитать размер компонента в памяти. В последнее время на этой теме было много постов, поэтому было бы легко найти. Если у вас нет большой структуры или запроса, сохраненного внутри, я думаю, вы здесь в порядке.

Во-вторых, опять же, если вы не заполните этот CFC с большим запросом из БД или выполняете медленный разбор, вы тоже в порядке.

В-третьих, обратите внимание на возможные ситуации, где больше пользователей меняют состояния этих компонентов. Если это так, используйте CFLOCK на каждой настройке компонентов состояния.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top