擦除数组 - 是否有必要?

w00*_*977 1 vb.net arrays

请看下面的代码:

Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Data.OracleClient

Public Class clsParameterValues
    Implements IDisposable

    Private paramValues(0) As DbParameter

    Public Function AssignParameterValues(ByVal strParameterName As String, ByVal strParameterValue As String, ByVal intDatabaseType As Integer) As Integer
        Dim intArrayBound As Integer

        intArrayBound = UBound(paramValues)
        If intArrayBound > 0 Then
            ReDim paramValues(intArrayBound)
        End If

        If intDatabaseType = 1 Then

            paramValues(intArrayBound) = New SqlParameter(strParameterName, strParameterValue)
        ElseIf intDatabaseType = 2 Then
            paramValues(intArrayBound) = New OracleParameter(strParameterName, strParameterValue)
            'paramValues(intArrayBound) = New OracleParameter(":" & strParameterName, OracleType.Int32)
            'paramValues(intArrayBound).Value = strParameterValue
        End If
        Return intArrayBound
    End Function

    Public Function getParameterValues() As DbParameter()
        Return paramValues
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        Erase paramValues
        paramValues = Nothing
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

网页功能如下所示:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim objParameterValues As New clsParameterValues
                Using objParameterValues
                    'Use the objParameterValues class here.
                End Using
                objParameterValues=nothing
            End Using
End Sub
Run Code Online (Sandbox Code Playgroud)

IDisposable.Dispose在设置之前用来擦除数组Nothing.我认为这是不好的做法,因为Array类没有实现IDisposable.是否甚至需要擦除数组并将其设置为Nothing?(垃圾收集器是否涉及此问题?)

Han*_*ant 6

Public Sub Dispose() Implements IDisposable.Dispose
    Erase paramValues
    paramValues = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

Erase语句可以使用旧版Basic,即手动内存管理很有用的类型.不再,内存管理在.NET中是自动的.出于兼容性原因,仍然支持它.它所做的就是将数组引用设置为Nothing.所以你的代码相当于:

Public Sub Dispose() Implements IDisposable.Dispose
    paramValues = Nothing
    paramValues = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

所以没有意义.你永远不应该实现IDisposible将变量设置为Nothing,这不是接口的契约.可能永远不会再使用被处置物体.所以没有必要将数组引用设置为null,因为它实际上对垃圾收集堆上的实际数组对象没有任何作用.我不能看到你想要帮助的场景,任何clsParameterValues对象都应该有一个有限的生命周期.当您使数组引用为空时,它就不再有用了.

只需删除IDisposable实现.