Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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中的对象处理和垃圾回收_Vb.net_Winforms - Fatal编程技术网

vb.net中的对象处理和垃圾回收

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

我理解这是一个相当广泛的问题,所以我将详细说明,试图解释为什么我很难理解这个过程

据我所知,VB.Net和.Net framework通常都内置了垃圾收集,这意味着当我
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+对象都是一次性对象)。这是否回答了您的问题?