Is Disposing of Entity Framework context object required

后端 未结 5 1512
臣服心动
臣服心动 2021-02-07 09:39

We are using entity framework for communication with database in our WCF service methods, recently we run the code review tool on our service code. As usual we got many review p

5条回答
  •  感情败类
    2021-02-07 10:08

    Simply: DbContext implements IDisposable, therefore you should dispose of it, manually, as soon as you're done with it.

    You don't need to dispose of it, because the GC will collect it eventually, but the GC isn't deterministic: you never know when "eventually" will be. Until it's disposed, it will be holding resources that aren't in use - for example, it may still have an open database connection. Those resources aren't freed until the GC runs, unless you dispose manually. Depending on specific details you may find that you have unnecessarily blocked network resources, file accesses, and you will certainly be keeping more memory reserved than you need to.

    There's a further potential hit, too: when you dispose of an object manually, the GC doesn't typically need to call the Finalizer on that object (if there is one). If you leave the GC to automatically dispose of an object with a Finalizer, it'll place the object in a Finalizer Queue - and will automatically promote the object to the next GC generation. This means that an object with a finalizer will always hang around for orders of magnitude longer than it needs to before being GCed (as successive GC generations are collected less frequently). DBContext would likely fall into this category as the underlying database connection will be unmanaged code.

    (Useful reference.)

提交回复
热议问题