E 'ok per memorizzare oggetti di grandi dimensioni (componente Java per esempio) in una variabile Application?

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

Domanda

Sto sviluppando un'applicazione in questo momento che crea e memorizza una connessione a un server XMPP locale nel Portata di applicazione. I metodi di connessione sono memorizzati in un CFC che consente di verificare l'Application.XMPPConnection sia collegato e autorizzato ogni volta che viene utilizzato, e si avvale della connessione per inviare gli eventi dal vivo per gli utenti. Per quanto posso dire, questo sta funzionando benissimo. Ma non è stato testato sotto qualsiasi tipo di stress.

La mia domanda è: Sarà questo set up causare problemi in seguito Mi chiedo solo perché non riesco a trovare le prove di altre persone che utilizzano variabili Application in questo modo?. Se non fossi usando Railo sarei utilizzando il gateway evento di CF invece eseguire la stessa operazione.

È stato utile?

Soluzione

Dimensioni in sé non è un problema. Se si dovesse per inizializzare un oggetto per ogni richiesta, che ci si bruciano molta più memoria. Il problema è l'accesso.

Se si dispone di un gran numero di richieste in competizione per lo stesso oggetto, è necessario misurare il tempo di accesso per quella di istanze oggetto vs.. Tenete a mente che, per gli oggetti di dati, più di un thread può leggerli. La mia comprensione, però, è che quando viene chiamata la funzione di un oggetto, non si blocca quell'oggetto ad altri thread fino a quando la funzione ritorna.

Inoltre, se l'oggetto mantiene lo stato, è necessario considerare che cosa fare quando più thread sono sempre / impostare i dati. Si finisce con condizioni di gara?

Si potrebbe considerare la manipolazione di questo oggetto nello scope di sessione, in modo che sia un'istanza solo per utente (che, probabilmente, farà solo una o due richieste simultanee).

Altri suggerimenti

Naturalmente è possibile utilizzare portata di applicazione per la memorizzazione di questi componenti se vengono utilizzati da tutti gli utenti in diverse parti della domanda. Ora, possibili problemi sono:

  1. dimensioni del componente (s)
  2. tempo necessario per l'inizializzazione se questi sono impostati durante l'avvio di applicazione
  3. condizioni tra ambiente / gli stati ottenere di questi componenti da corsa

Per la prima, ci sono modi per calcolare dimensioni di un componente in memoria. Ultimamente ci sono stati un sacco di messaggi su questo argomento così sarebbe facile trovare qualche. Se non avete un po 'di grande struttura o query salvato dentro, credo che sei OK qui.

In secondo luogo, ancora una volta, se non si sta riempiendo questo CFC con alcune query di grandi dimensioni da DB o fare qualche lento analisi, stai bene anche qui.

In terzo luogo, prestare attenzione a possibili situazioni, in cui più utenti stanno cambiando stati di questi componenti. Se è così l'uso cflock su ogni impostazione dei componenti dello stato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top