vb.net中的对象处理和垃圾回收
我理解这是一个相当广泛的问题,所以我将详细说明,试图解释为什么我很难理解这个过程 据我所知,VB.Net和.Net framework通常都内置了垃圾收集,这意味着当我vb.net中的对象处理和垃圾回收,vb.net,winforms,Vb.net,Winforms,我理解这是一个相当广泛的问题,所以我将详细说明,试图解释为什么我很难理解这个过程 据我所知,VB.Net和.Net framework通常都内置了垃圾收集,这意味着当我Dim一个变量并给它赋值时,我不需要将其声明为null,也不需要在之后“dispose”它 最近,在中,我被提醒在这个代码示例中处理我的笔和画笔对象: Private Sub pbProfilePicture_Paint(sender As Object, e As PaintEventArgs) Handles pbPr
Dim
一个变量并给它赋值时,我不需要将其声明为null,也不需要在之后“dispose”它
最近,在中,我被提醒在这个代码示例中处理我的笔
和画笔
对象:
Private Sub pbProfilePicture_Paint(sender As Object, e As PaintEventArgs) Handles pbProfilePicture.Paint
Dim myPen As Pen
Dim myBrush As Brush
myPen = New Pen(Drawing.Color.FromArgb(180, 204, 112), 1)
myBrush = New SolidBrush(Color.FromArgb(180, 204, 112))
Dim myGraphics As Graphics = e.Graphics
myGraphics.DrawEllipse(myPen, 28, 28, 12, 12)
myGraphics.FillEllipse(myBrush, 28, 28, 12, 12)
End Sub
我被告知使用Using
命令或手动处理它们(假设每个对象都使用.dispose()
)。我的问题是,在这种情况下,我为什么需要处理对象?对于需要处理哪些对象以及自动处理哪些对象,是否有经验法则?从文档中可以看出,它似乎遵循了处理任何使用New
关键字初始化的内容的模式
在应用程序中不处理对象、阻塞和增加内存使用是否会造成后果
任何关于我可以从哪里开始的帮助都会非常有用 当您创建的对象公开公共的
Dispose()
方法时,您可以隐式地(使用语句:例如,使用[object]作为[Type]=New[Type]()…End use
)或显式地(调用[object].Dispose()
)处理它。它与分配的非托管资源更相关,GDI+/User handles等。谢谢@Jimi-所以每次创建对象时,检查.Dispose()
方法是否可以用作检查每个对象的方法?这正是我想要的,一种检查/测试和学习的方法。你可以用它作为一种经验法则。当对象公开该方法时,意味着(大多数情况下)需要调用它,因为可能需要释放非托管资源。想想FileStream类:创建一个类时,必须调用它的Close()
或Dispose()
(但作为默认的M.O调用Dispose()
)方法来释放文件句柄。否则,文件将保持锁定状态。这同样适用于可能包装非托管资源的其他对象(笔、画笔、字体、位图等——所有GDI+对象都是一次性对象)。这是否回答了您的问题?当您创建的对象公开公共的Dispose()
方法时,您可以隐式地(使用语句:例如,使用[object]作为[Type]=New[Type]()…End use
)或显式地(调用[object].Dispose()
)处理它。它与分配的非托管资源更相关,GDI+/User handles等。谢谢@Jimi-所以每次创建对象时,检查.Dispose()
方法是否可以用作检查每个对象的方法?这正是我想要的,一种检查/测试和学习的方法。你可以用它作为一种经验法则。当对象公开该方法时,意味着(大多数情况下)需要调用它,因为可能需要释放非托管资源。想想FileStream类:创建一个类时,必须调用它的Close()
或Dispose()
(但作为默认的M.O调用Dispose()
)方法来释放文件句柄。否则,文件将保持锁定状态。这同样适用于可能包装非托管资源的其他对象(笔、画笔、字体、位图等——所有GDI+对象都是一次性对象)。这是否回答了您的问题?