c# - 是否存在使用不会处理对象的情况?

标签 c# using-statement

在某些情况下 using 不会处理它应该处理的对象吗?

例如,

using(dbContext db = new dbContext()){ ... }

在最后一个 } db 之后还有什么办法吗?

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

object o =  new object();
using(dbContext db = new dbContext()){
 o = db.objects.find(1);
}

有没有可能 o 可以让 db 存活?

最佳答案

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

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

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

关于c# - 是否存在使用不会处理对象的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404032/

相关文章:

c# - 如何在 .Net C# 中通过代理服务器打开套接字?

c# - 从Dictionary的值中获取名称,以逗号分隔的值字符串

c# - WCF 代理使用

c# - 显示使用指令的位置

c# 问题 - 是否有工具可以确定我应该/可以在何处使用 "using"语句来确保资源已关闭?

c# - 使用 block 时的编译器错误

c# - 仅在 Debug模式下发生内存泄漏

c# - Metro 风格应用程序的发布问题

c# - 如何判断资源是否不受管理?

c# - 将部分填充的 DTO 映射到域对象