关于返回 Array 的 Property的性能测试

下载源代码尝试

在封装数据库中经常使用会使用一些返回 Array 的 Property 来表示子表的抽象连接。

于是,对不同的使用方法作了一次测试

Public Class PropertySpeedTestClass

    Public ReadOnly Property Ints() As Array
        Get
            Dim x As New ArrayList
            Dim i As Integer
            For i = 1 To 1000
                x.Add(i)
            Next

           Return x.ToArray
        End Get
    End Property
End Class

对于同一个属性使用两种访问方法 ,竟然得到一个47倍的性能差异  

 方法1   直接访问 [47秒完成]

    Public Sub TestForm1()
        Dim i, m, n As Integer
        n = Me.NumericUpDown1.Value - 1
        Dim x As Integer
        Dim tc As PropertySpeedTestClass = New PropertySpeedTestClass
        Dim b As Date = Now
        For i = 0 To n
            For m = 1 To 1000
                x = tc.Ints(i)
            Next

            If i Mod 200 = 0 Then
                Label1.Text = "Over " & i
            End If
        Next
        Label1.Text = DateDiff(DateInterval.Second, b, Now)
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Label1.Text = "In Testing........."
        Dim test As New Thread(AddressOf Me.TestForm1)
        test.Start()
        Button1.Enabled = True
    End Sub

 方法2  利用Clone做一个缓冲区访问  [0.8秒完成]


    Public Sub TestForm2()
        Dim i, m, n As Integer
        n = Me.NumericUpDown1.Value - 1
        Dim x As Integer
        Dim tc As PropertySpeedTestClass = New PropertySpeedTestClass
        Dim b As Date = Now
        For i = 0 To n
            Dim temp As Array = tc.Ints.Clone
            For m = 1 To 1000
                x = temp(i)
            Next
        Next
        Label2.Text = DateDiff(DateInterval.Second, b, Now)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Button2.Enabled = False
        Label2.Text = "In Testing........."
        Dim test As New Thread(AddressOf Me.TestForm2)
        test.Start()
        Button2.Enabled = True
    End Sub

 下载源代码尝试

看来.net 的编译器还是不够聪明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值