c# session - ASP.NET eliminando un elemento de la Sesión?




variables request (5)

Sé que este es un tema viejo, pero definitivamente me quedo con Session["key"] = null - ¡es mucho más rápido! He hecho algunas pruebas (en el estado de sesión de InProc), eliminando 1000 elementos en la fila (el tiempo transcurrido es de 1000 elementos en total, por lo que si desea un tiempo promedio para un elemento, simplemente divídalo con 1000):

Eliminando 1000 elementos existentes:

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

Eliminando 1000 elementos NO existentes:

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

Eliminando 500 elementos existentes y 500 no existentes:

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

Aquí hay una pieza de código para la primera prueba:

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();

¿Qué método es el preferido?

Session.Remove("foo");

Session["foo"] = null;

¿Hay una diferencia?


Tiene el mismo efecto. Personalmente creo que el método Session.Remove expresa mejor la intención del programador.

Aquí algunos enlaces a la documentación en MSDN:

"Propiedad HttpSessionState.Item:

Tipo de valor de propiedad: System.Object

El valor de estado de sesión con el nombre especificado o referencia nula (Nothing en Visual Basic) si el elemento no existe. "


La mayor diferencia es cómo lees de la sesión.

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

o

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

Si usa el primer método, establecer el valor en null no funcionará, y debería usar eliminar.

Si usa el segundo método, puede establecer el valor en nulo.


Me gustaría ir con Remove pero honestamente no puedo decir si hay una diferencia. Supongo que todavía puede haber una clave vacía guardada para ese valor nulo, pero no está seguro. Eliminar me daría pocas dudas y si eso es lo que quieres hacer, también se lee mejor en el código.


Del libro de examen de autoaprendizaje MCTS 70-515 libro:

Con aplicación web (proyecto),

  1. Puede crear una aplicación MVC.
  2. Visual Studio almacena la lista de archivos en un archivo de proyecto (.csproj o .vbproj), en lugar de confiar en la estructura de carpetas.
  3. No puedes mezclar Visual Basic y C #.
  4. No puede editar código sin detener una sesión de depuración.
  5. Puede establecer dependencias entre múltiples proyectos web.
  6. Debe compilar la aplicación antes de la implementación, lo que le impide probar una página si otra página no se compila.
  7. No es necesario almacenar el código fuente en el servidor.
  8. Puedes controlar el nombre y la versión del ensamblaje.
  9. No puede editar archivos individuales después de la implementación sin volver a compilar.






c# asp.net .net session session-variables