关于返回 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 的编译器还是不够聪明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抱歉,我可以回答这个问题。在numpy中,可以使用函数numpy.argmax(array, axis)获取array中最大值的所在列的索引。其中,axis为1表示按行计算,返回每行最大值所在列的索引。示例代码如下: ``` import numpy as np array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) column_indices = np.argmax(array, axis=1) print(column_indices) # 输出 [2 2 2],表示每行最大值所在的列索引 ``` 在上面的示例中,array为一个3行3列的数组,其中每行最大值所在的列索引分别为2、2、2。 ### 回答2: numpy可以使用函数`numpy.where()`来返回array中满足条件的元素的索引。对于返回array的列号,可以使用如下的步骤: 1. 导入numpy模块:import numpy as np 2. 定义一个array:arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 3. 使用`numpy.where()`函数找到符合条件的元素的索引:col_indexes = np.where(arr == target_value)[1] 注意,`np.where()`函数的第一个参数是条件,可以是一个表达式或者一个函数,第二个参数是选择对应元素的轴。在本例中,我们使用`arr == target_value`作为条件,表示寻找等于目标值的元素。然后,我们使用1来选择对应的列轴。 执行完以上步骤后,`col_indexes`将会是一个包含满足条件的元素所在列索引的数组。 此外,如果要返回第一次出现满足条件的元素所在列的索引,可以使用`numpy.argmax()`函数。如下所示: col_index = np.argmax(arr == target_value, axis=1) 其中,`arr == target_value`作为条件,返回一个布尔类型的数组,然后`numpy.argmax()`函数查找布尔数组中第一个为True的元素所在的索引,axis=1表示按列进行查找。 最后,`col_index`将会是第一次出现满足条件的元素所在列的索引。 ### 回答3: numpy返回array的列号可以使用numpy库中的argmax函数来实现。argmax函数返回数组中的最大值所在的索引位置,可以通过指定axis参数来实现对行或列进行操作。当axis参数的值为0时,表示针对每列进行操作,返回每列中最大值所在的索引位置;当axis参数的值为1时,表示针对每行进行操作,返回每行中最大值所在的索引位置。 具体实现如下: ```python import numpy as np # 创建一个二维数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回每列最大值所在的索引位置 column_indices = np.argmax(arr, axis=0) print(column_indices) ``` 运行结果为: ``` [2 2 2] ``` 上述代码中,我们创建了一个2维数组`arr`,然后使用`np.argmax(arr, axis=0)`对每列进行操作,返回每列最大值所在的索引位置,存储在`column_indices`数组中。最终输出的结果为`[2 2 2]`,表示第一列的最大值为7,在第3行;第二列的最大值为8,在第3行;第三列的最大值为9,在第3行。 所以,np.argmax函数可以用来返回array的列号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值