Best Practice--使用using()
当我们在创建一个ObjectContext实例时,我们总是把它加到using()语句里面。如下:
using (var context = new EFRecipesEntities()) { … }
如果你对这种模式不熟悉的话,没关系,这很简单的。通常,当我们创建一个实例对象时,我们用new这个操作符,并给它的一些变量赋上值。当变量超出它本身的范围内和某一对象不被其他东西引用时,垃圾回收机制就会在某个时间行使职责,将这段内存空间重新分给的对像。这个机制很好,因为在.net程序中我们会创建无数对象,这些对象大都都会占用一定的资源,不用时等待垃圾收集器来把这些收回去。但是垃圾收集器具有不确定性,它按自己的时间安排来处理这些资源,这是程序员不可控的。而ObjectContext对象手中掌握的是像数据库连接这样的资源,这是我们一旦处理完就马上要释放的,而不能放着等垃圾收集器慢悠悠来处理它。
使用using语句就有这样几个好处:
- 当代码执行离开using(){}这个范围时,context里面的Dispose()方法会自动调用(因为ObjextContext实现了IDisposable接口)。在ObjectContext中,Dispose方法会关闭所有活跃的数据库连接,并且适当地清除需要释放的其他资源。
- 不管代码是怎么离开using{}这块范围的,Dispose()方法都会被调用。更重要的是,它还包含了返回语句和可能在代码段中会抛出的异常。using(){}保证了关键资源能过适当
所以,在这儿要提出的Best Practice就是:当你要创建ObjectContext实例时,把你的代码封装在using(){}块里。只是多了这样一步,就帮你给你的代码传上了防弹衣。