¿Está bien para almacenar objetos grandes (componente de Java por ejemplo) en una variable de aplicación?

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

Pregunta

estoy desarrollando una aplicación en este momento que crea y almacena una conexión a un servidor XMPP local en el ámbito de aplicación. Los métodos de conexión se almacenan en un CFC que se asegura la Application.XMPPConnection está conectado y autorizado cada vez que se utiliza, y hace uso de la conexión para enviar eventos a los usuarios. Por lo que yo puedo decir, esto está funcionando bien. Pero no ha sido probado bajo cualquier tipo de estrés.

Mi pregunta es: este conjunto hasta causar problemas más adelante Me pregunto porque no puedo encontrar evidencia de otras personas que utilizan variables de aplicación de esta forma?. Si yo no estuviera usando Railo iba a usar la puerta de enlace evento CF en lugar de realizar la misma tarea.

¿Fue útil?

Solución

Tamaño sí mismo no es un problema. Si se va a inicializar un objeto por pedido, te quema mucho más memoria. El problema es el acceso.

Si usted tiene un gran número de solicitudes que compiten por el mismo objeto, es necesario medir el tiempo de acceso para que la instanciación de objetos frente. Tenga en cuenta que, para los objetos de datos, más de un hilo puede leerlos. A mi entender, sin embargo, es que cuando la función de un objeto se llama, se bloquea ese objeto a otros hilos hasta que se devuelve la función.

Además, si el objeto mantiene el estado, debe tener en cuenta lo que hay que hacer cuando varios subprocesos obtener / establecer esos datos. Va a terminar con las condiciones de carrera?

Se podría considerar la posibilidad de manipular este objeto en el ámbito de sesión, de modo que sólo se crea una instancia por usuario (que, probablemente, sólo hará que una o dos solicitudes simultáneas).

Otros consejos

Por supuesto, puede utilizar alcance de uso para el almacenamiento de estos componentes si son utilizados por todos los usuarios en diferentes partes de la aplicación. Ahora, los posibles problemas son:

  1. tamaño del componente (s)
  2. tiempo necesario para la inicialización si éstos se ajustan durante el inicio de la aplicación
  3. condiciones entre ajuste / recibiendo estados de estos componentes carreras

En la primera, hay maneras de calcular el tamaño de un componente en la memoria. Últimamente había un montón de mensajes sobre este tema por lo que sería fácil de encontrar alguna. Si usted no tiene una estructura grande o consulta guardada en el interior, lo que supongo que estás bien aquí.

En segundo lugar, una vez más, si no está llenando esta CFC con un poco de consulta de gran tamaño de la base de datos o haciendo algún análisis lento, que estás bien aquí también.

En tercer lugar, prestar atención a las posibles situaciones en las que más usuarios están cambiando estados de estos componentes. Si es así el uso cflock en cada ajuste de los componentes del estado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top