是否存在使用不会丢弃物体的情况?

Tra*_*s J 4 c# using-statement

是否有任何情况下使用不会处理它应该处理的对象?

例如,

using(dbContext db = new dbContext()){ ... }
Run Code Online (Sandbox Code Playgroud)

有没有办法在最后一个}数据库仍然存在之后?

如果出现这种情况怎么办:

object o =  new object();
using(dbContext db = new dbContext()){
 o = db.objects.find(1);
}
Run Code Online (Sandbox Code Playgroud)

是否有可能o保持db活力?

Tho*_*que 6

我认为你混淆了两个概念:处理和垃圾收集.

处置对象会释放此对象使用的资源,但这并不意味着该对象已被垃圾回收.垃圾收集只会在不再引用您的对象的情况下发生.

因此在您的示例中,db.Dispose将在using块的末尾调用(将关闭连接),但DbContext仍将引用o.由于o是局部变量,因此DbContext在方法返回时将有资格进行垃圾回收.


Ant*_*ram 5

AliveDisposed是两个非常不同的东西.

如果o是一个对象(通过字段,属性,本身等)保存到dbContext对象,并且垃圾回收器确定两者o和dbContext对象仍然可以访问,那么该对象将保持活动状态.但是,一旦执行正常退出使用块,该对象仍将被丢弃.