2009-05-21 8 views
7

Dire di voler condividere alcune risorse, come una classe o una variabile attraverso tutti i thread/sessioni all'interno di un'applicazione Web ASP.NET. Cos'è meglio?Cosa c'è di meglio: variabile statica V.S. Asp.NET Application Session?

1) Una variabile statica dotata di accessori thread-safe a tale variabile statica?

2) O una variabile di sessione dell'applicazione ASP.NET?

+3

Questa è una vittima di http://stackoverflow.com/questions/303725/asp-net-application-state-vs-a -static-object –

+0

Ahh ok ... Non l'ho visto ... cosa dovrei fare per chiudere questa domanda allora? – 7wp

risposta

7

Se si dispone solo di uno di questi, c'è poca differenza.

Se si dispone di più, è necessario utilizzare variabili statiche piuttosto che Application variabili. Il metodo Application.Lock si blocca tuttiApplication variabili, mentre è possibile utilizzare identificatori syncronisition separate per le variabili statiche, in modo che ogni serratura ha effetto solo il codice che accede quella variabile specifica.

+0

Quindi, se il sito si trova in una web farm? e hai un esempio di questo. – Choco

+0

@Choco: Quindi non è possibile condividere lo stesso oggetto durante l'invio di dati tra server. Ecco un articolo che offre una panoramica delle opzioni: http://www.codeproject.com/Articles/180726/State-management-and-ways-to-handle-Cache-in-a-Web – Guffa

0

Questo è uno scenario comune in cui si attraversano più pagine e si raccolgono dati. Vorrei usare un oggetto Session per questo scenario. Le variabili statiche dovrebbero essere utilizzate quando l'applicazione completa necessita dello stesso oggetto.

Se il valore che si desidera conservare dipende dall'utente, utilizzare Sessione.

0

Quelle vere variabili di sessione dovrebbero essere utilizzate solo se si desidera memorizzare il valore per l'intera sessione, ma nel caso si desideri che le variabili siano inizializzate e da utilizzare tra i moduli e se cambiate in betwwen dovrebbe essere disponibile attraverso l'intera applicazione per lo stesso oggetto deve utilizzare variabili statiche.

4

Statico Utenti offrirà prestazioni migliori, ma il rovescio della medaglia è che non sono thread-safe:

Si consiglia di memorizzare i dati in membri statici della classe di applicazione anziché nell'oggetto Application. Ciò aumenta le prestazioni poiché è possibile accedere a una variabile statica più rapidamente di quanto non sia possibile accedere a un elemento nel dizionario dell'applicazione.

Da: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

e:

http://weblogs.asp.net/plip/archive/2003/12/01/40526.aspx

Problemi correlati