Domanda

Quale metodo è preferito?

Session.Remove("foo");

Session["foo"] = null;

C'è una differenza?

È stato utile?

Soluzione

  

C'è una differenza?

C'è. Session.Remove (key) elimina la voce (sia key & amp; value) dal dizionario mentre Session [key] = null assegna un valore (che risulta essere nullo) a una chiave. Dopo la prima chiamata, il tasto non verrà visualizzato nella raccolta Session # Keys . Ma dopo quest'ultimo, la chiave può ancora essere trovata nella raccolta chiavi.

Altri suggerimenti

So che questo è vecchio thread, ma sicuramente mantieni il Session [" key "] = null - è molto più veloce! Ho fatto alcuni test (su InProc Session State), rimuovendo 1000 articoli in fila (il tempo trascorso è per 1000 articoli in totale, quindi se vuoi un tempo medio per un articolo, dividi per 1000):

Rimozione di 1000 elementi esistenti:

Session[key] = null; - 0.82380000000000009 ms
Session.Remove(key); - 59.960100000000004 ms

Rimozione di 1000 articoli NON esistenti:

Session[key] = null; - 1.5368000000000002 ms
Session.Remove(key); - 0.6621 ms

Rimozione di 500 elementi esistenti e 500 non esistenti:

Session[key] = null; - 1.0432000000000001 ms
Session.Remove(key); - 33.9502 ms

Ecco un pezzo di codice per il primo test:

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = null;
sw1.Stop();

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session.Remove(i.ToString());
sw2.Stop();

Vorrei andare con Rimuovi ma non posso onestamente dire se c'è una differenza. A un'ipotesi potrebbe esserci ancora una chiave vuota mantenuta per quel valore nullo ma non ne sono sicura. Rimuovere mi darebbe pochi dubbi e se è quello che vuoi fare legge meglio anche nel codice.

Ha lo stesso effetto. Personalmente penso che il metodo Session.Remove esprima meglio l'intento del programmatore.

Ecco alcuni link alla documentazione su MSDN:

" Proprietà HttpSessionState.Item:

Valore della proprietà Tipo: System.Object

Il valore dello stato della sessione con il nome specificato o riferimento null (Nothing in Visual Basic) se l'elemento non esiste. & Quot;

La differenza più grande è come leggi dalla sessione.

if(Session.ContainsKey["foo"]) { return Session["foo"]; }

o

if(Session["foo"] != null) { return Session["foo"]; }

Se si utilizza il primo metodo, l'impostazione del valore su null non funzionerà e si dovrebbe usare remove.

Se si utilizza il secondo metodo, è possibile impostare il valore su null.

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