在C#中调用Dispose从Heap中删除对象?

dev*_*747 5 c# dispose

如果我做conn.Dispose(); (其中conn是SqlConnection类的一个实例),是否会清除堆中的conn对象?

Dar*_*rov 13

不,调用Dispose不会清除堆中的连接.在SqlConnection实例上调用Dispose方法时,只需将连接返回到底层连接池即可.它甚至没有关闭连接.ADO.NET使用连接池.因此,当您创建SqlConnection的新实例时,您不打开新连接,只需从连接池中绘制一个连接,当您调用Dispose时,只需将此连接返回到连接池,以便可以重用它.

通常IDisposable,.NET中的模式旨在由包含某些非托管资源的指针的类实现.调用Dispose方法可确保正确释放这些非托管资源.

从堆中删除对象是垃圾收集器所做的事情,当这种情况发生时是一个非确定性事件(您无法控制它).

  • @ ken2k,您是否阅读了文档中的第二个"注意":`当从连接池获取连接或返回到连接池时,不会在服务器上引发登录和注销事件,因为连接实际上并未关闭返回到连接池.有关详细信息,请参阅SQL Server连接池(ADO.NET). (2认同)