Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net IDispose是必需的,垃圾收集器在循环结束时工作吗_Vb.net_Garbage Collection_Idisposable - Fatal编程技术网

Vb.net IDispose是必需的,垃圾收集器在循环结束时工作吗

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

我的问题是关于IDisposable实现。据我所知,当代码或部分完成时,变量或实例被处理;如果陈述有误,请纠正我。以下是我计划的一部分:

 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。这只是一个暗示,它可能使用非托管资源,应该尽快处理