Posso armazenar objetos grandes (componente Java, por exemplo) em uma variável de aplicativo?

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

Pergunta

Estou desenvolvendo um aplicativo agora que cria e armazena uma conexão com um servidor XMPP local no escopo do aplicativo.Os métodos de conexão são armazenados em um cfc que garante que Application.XMPPConnection esteja conectado e autorizado cada vez que for usado, e utiliza a conexão para enviar eventos ao vivo aos usuários.Pelo que posso dizer, isso está funcionando bem.MAS não foi testado sob nenhum tipo de estresse.

Minha pergunta é: Essa configuração causará problemas mais tarde? Só pergunto porque não consigo encontrar evidências de outras pessoas usando variáveis ​​de aplicativo dessa maneira.Se eu não estivesse usando o railo, estaria usando o gateway de eventos do CF para realizar a mesma tarefa.

Foi útil?

Solução

O tamanho em si não é um problema.Se você inicializasse um objeto por solicitação, queimaria muito mais memória.O problema é o acesso.

Se você tiver um grande número de solicitações competindo pelo mesmo objeto, será necessário medir o tempo de acesso desse objeto versus o tempo de acesso desse objeto.instanciação.Tenha em mente que, para objetos de dados, mais de um thread pode lê-los.Meu entendimento, porém, é que quando a função de um objeto é chamada, ela bloqueia esse objeto para outros threads até que a função retorne.

Além disso, se o objeto mantiver o estado, você precisará considerar o que fazer quando vários threads estiverem obtendo/definindo esses dados.Você vai acabar com condições de corrida?

Você pode considerar manipular esse objeto no escopo da sessão, para que ele seja instanciado apenas por usuário (que provavelmente fará apenas uma ou duas solicitações simultâneas).

Outras dicas

É claro que você pode usar o escopo do aplicativo para armazenar esses componentes se eles forem usados ​​por todos os usuários em diferentes partes do aplicativo.Agora, os possíveis problemas são:

  1. tamanho do(s) componente(s)
  2. tempo necessário para inicialização se estes forem definidos durante o início do aplicativo
  3. condições de corrida entre configurar/obter estados desses componentes

Para o primeiro, existem maneiras de calcular o tamanho de um componente na memória.Ultimamente houve muitos posts sobre esse assunto, então seria fácil encontrar alguns.Se você não tem alguma estrutura grande ou consulta salva dentro, acho que você está bem aqui.

Em segundo lugar, novamente, se você não estiver preenchendo este cfc com alguma consulta grande do banco de dados ou fazendo uma análise lenta, você também está bem aqui.

Terceiro, preste atenção a possíveis situações em que mais usuários alterem os estados desses componentes.Nesse caso, use cflock em cada configuração dos componentes do estado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top