¿Se requiere la eliminación del objeto de contexto de Entity Framework?

¿Se requiere la eliminación del objeto de contexto de Entity Framework?

Simplemente:DbContext implementa IDisposable , por lo tanto, debe desecharlo, manualmente, tan pronto como haya terminado con él.

No necesitas deshacerse de él, porque el GC lo recolectará eventualmente, pero el GC no es determinista:nunca se sabe cuándo será "eventualmente". Hasta que se elimine, mantendrá recursos que no están en uso; por ejemplo, es posible que aún tenga una conexión de base de datos abierta. Esos recursos no se liberan hasta que se ejecuta el GC, a menos que usted desecha manualmente. Dependiendo de los detalles específicos, es posible que haya bloqueado innecesariamente los recursos de la red, los accesos a los archivos y, sin duda, mantendrá más memoria reservada de la que necesita.

También hay otro impacto potencial:cuando se deshace de un objeto manualmente, el GC normalmente no necesita llamar al Finalizador en ese objeto (si hay uno). Si deja que el GC se deshaga automáticamente de un objeto con un finalizador, colocará el objeto en una cola de finalizadores y lo promoverá automáticamente a la próxima generación de GC. Esto significa que un objeto con un finalizador siempre se mantendrá durante órdenes de magnitud más largas de lo necesario antes de ser GCed (ya que las sucesivas generaciones de GC se recopilan con menos frecuencia). DBContext probablemente entraría en esta categoría ya que la conexión de la base de datos subyacente será un código no administrado.

(Referencia útil.)


Creo que el mejor enfoque es codificarlo dentro de una declaración de uso

using(var cx = new DbContext())
{
  //your stuff here
}

por lo que se eliminó automáticamente


En general, si algo implementa IDisposable es una buena idea (TM) desecharlo explícitamente cuando haya terminado. Esto es especialmente cierto si no posee la implementación de dicho objeto; debe tratarlo como una caja negra en este caso. Además, incluso si no fuera necesariamente "requerido" deshacerse de él ahora, puede serlo en el futuro.

Por lo tanto, en mi humilde opinión, la cuestión de si "necesita" deshacerse explícitamente del objeto es irrelevante. Si solicita que se elimine, en virtud de la implementación de IDisposable - debe desecharse.