vb.net - With... End With vs Using in VB.NET

标签 vb.net scope idisposable using-statement with-statement

我刚刚发现和 C# 一样,VB.NET 也有 using关键词。

直到现在我认为它没有它(愚蠢的我,我知道......)并做了这样的事情:

With New OleDbConnection(MyConnectionString)
   ' Do stuff
End With

与使用 using 相比,这样做有什么影响?像这样的声明
Using cn as New OleDBConnection(MyConnectionString)
    With cn
        ' Do stuff with cn
    End With
End using

更新:

我应该补充一点,我熟悉什么using语句的作用在于它在构造退出时处理对象。

但是,据我了解With New ...当对象超出范围时,构造将让对象将对象标记为准备好进行垃圾收集。

所以我的问题真的是,与 using 的唯一区别是我会立即释放内存,而使用 With构造它会在 GC 感觉时被释放吗?还是我在这里错过了更大的东西?

是否有任何最佳实践影响?我应该去重写我用过的所有代码 With New MyDisposableObject() ... End WithUsing o as New MyDisposableObject() ?

最佳答案

By using With...End With, you can perform a series of statements on a specified object without specifying the name of the object multiple times.

A Using block behaves like a Try...Finally construction in which the Try block uses the resources and the Finally block disposes of them.



托管资源由垃圾收集器处理,您无需进行任何额外编码。
您不需要使用 声明。
有时您的代码需要非托管资源。您有责任处理它们。 A 使用 块保证处置 当您的代码完成它们时,将调用对象上的方法。

关于vb.net - With... End With vs Using in VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538438/

相关文章:

python - 在函数内创建类并访问在包含函数的作用域中定义的函数

javascript - 将当前作用域的 jQuery/plainJS 变量/函数传递给从当前作用域调用的匿名函数

vb.net - VB Like 运算符与 Operators.LikeString() 不同

c# - VB.NET 中对 Linq/lambda 的混淆

javascript - 更改本地范围内的数组成员会更改全局范围内的成员

c# - 安全返回构造的 IDisposables 的最佳方法是什么?

.net - 互斥体是否正确实现以及如何处理它?

c# - 内存泄漏问题

vb.net - VB.Net 是否具有与 #pragma 警告禁用/恢复等效的功能?

c# - 将大型 ASP.NET VB.NET 项目转换为 C# - 增量?