难道Connection 对象是非托管的吗?

fanciex 2005-01-14 05:21:40
何时必须实现 IDisposable ,我一个DataAccess类用到了 SqlDataAdapter,是否一定要实现 IDisposable 接口,
以释放 SelectCommand.Connection 对象? 难道Connection 对象是非托管的吗?

我看到ms 的duwamish7.0 中是这么做的。
/// <summary>
/// Free the instance variables of this object.
/// </summary>
protected virtual void Dispose(bool disposing)
{
if (! disposing)
return; // we're being collected, so let the GC take care of this object

if (dsCommand != null )
{
if (dsCommand.SelectCommand != null)
{
if( dsCommand.SelectCommand.Connection != null)
dsCommand.SelectCommand.Connection.Dispose();
dsCommand.SelectCommand.Dispose();
}
dsCommand.Dispose();
dsCommand = null;
}
}
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnhgj 2005-01-14
  • 打赏
  • 举报
回复
直接用using语句就会自动释放了

using(SqlConnection conn = new SqlConneciton(...))
{
............
}
Ivony 2005-01-14
  • 打赏
  • 举报
回复
Connection是托管的类,但使用了非托管的资源。

如果你的类包含了Connection,请实现IDispose接口,将Dispose方法映射到Connection.Dispose方法上。

原因:
Connection包含非托管资源,包含非托管资源的对象应实现IDispose方法以释放非托管资源,而你的类的对象包含了Connection对象,所以你的类的对象也包含了非托管资源。如果你不能自动及时地释放Connection的非托管资源,就应该实现IDispose接口,以令外部程序能手动释放你的对象的非托管资源。
time_is_life 2005-01-14
  • 打赏
  • 举报
回复
定义一种释放分配的非托管资源的方法。

继承IDisposal是为了及时地释放数据

YouCustomConnection:sqlConnection,IDisposal
{
...
}

using(YouCustomConnection)
{

}

... //在这里数据连结就被释放掉了

至于sqlConnection是不是托管的资源,我也不知道,学习...
welshem 2005-01-14
  • 打赏
  • 举报
回复
Dispose主要用于适放非托管资源
Connection只要Close就行了

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧