Vb.net IDispose是必需的,垃圾收集器在循环结束时工作吗
我的问题是关于IDisposable实现。据我所知,当代码或部分完成时,变量或实例被处理;如果陈述有误,请纠正我。以下是我计划的一部分:Vb.net IDispose是必需的,垃圾收集器在循环结束时工作吗,vb.net,garbage-collection,idisposable,Vb.net,Garbage Collection,Idisposable,我的问题是关于IDisposable实现。据我所知,当代码或部分完成时,变量或实例被处理;如果陈述有误,请纠正我。以下是我计划的一部分: If Con.State = ConnectionState.Closed Then Con.Open() Cmd = New SqlCeCommand("Select * from BillItem", Con) Rdr = Cmd.ExecuteReader() While Rdr.Read = True
If Con.State = ConnectionState.Closed Then Con.Open()
Cmd = New SqlCeCommand("Select * from BillItem", Con)
Rdr = Cmd.ExecuteReader()
While Rdr.Read = True
Dim x As New Classes.StockRoster
x.BillID = Rdr("BillID")
x.IsSales = Rdr("IsSales")
x.Quantity = Rdr("Quantity")
x.ContactBase = (From t As CommonCodes.ItemBase In ContactsbaseDict Where t.ID = BillContactDict(x.BillID)).First
x.StockEntityBase = StockEntitydict(Rdr("StockID"))
x.BillDate = Rdr("BillDate")
result.AddRange(x)
End While
Con.Close()
End IF
对于这里的X变量,如果IX(或StockRoster)使用IDisposable接口,内存会有任何改善吗
在每个循环结束时,默认情况下不能释放资源吗?IDisposable是关于释放非托管资源,例如数据库连接。这与垃圾收集无关
您的
stocklotister
类似乎不包含非托管资源,因此不需要实现IDisposable
。即使是这样,在for
循环中处理它也是没有意义的,因为您将实例添加到稍后将使用的结果列表中。在for
循环中处理它会使实例在调用代码中不可用。首先,如果连接打开,您将永远不会输入If子句
,如果出现异常,可能会发生什么情况
实际上,连接就是最好的例子。始终尽快关闭连接。最简单的方法是使用using语句
,该语句在末尾调用Dispose
(即使在出现异常的情况下)。所以它类似于一个Try/Catch/Finally
<代码>连接。Dispose也将隐式关闭它
根据经验:对于任何实现IDisposable
(如上面的SqlCeCommand
)的内容,都使用using语句
要回答您的实际问题:
如果Ix(或Stockfloster)愿意的话,记忆会有什么改善吗
使用IDispose类,在默认情况下无法在
每个循环结束
什么是内存改进,IDisposable
是一个接口,即使类没有实现IDisposable
,您也可以调用dispose或close。这只是一个暗示,它可能使用非托管资源,应该尽快处理