首页 > 解决方案 > 与 COM 对象 (flexgrid) 的后期绑定比早期绑定慢 2 倍

问题描述

Public Function gridloop(MSFG1 As Object) As Long
     For  i= 0 To MSFG1.rows - 1 
            A = MSFG1.TextMatrix(i,1)
        Next
End Function

上面的代码比下面的慢 2 倍

Public Function gridloop(MSFG1 As MSHFlexGrid) As Long
Public Function gridloop(MSFG1 As MSFlexGrid) As Long

有什么办法可以加速吗?

标签: vb6msflexgrid

解决方案


问题中没有太多细节,我想你有两个(或更多?)不同的控件,你试图从本质上重载你的gridloop函数,以便它可以与多种类型的控件一起使用?

以下可能会提供性能改进。我没有对此进行测试,甚至没有确认它没有编译错误。想法是确定控件类型,然后将其分配给匹配类型的变量,然后对方法和属性的引用可能会被提前绑定(因此更快)。

Public Function gridloop(MSFG1 as Object) as Long
  Dim myMSHFlexGrid As MSHFlexGrid
  Dim myMSFlexGrid As MSFlexGrid
  Dim i As Integer
  Dim A As Long

  If TypeOf MSFG1 Is MSHFlexGrid Then
    Set myMSHFlexGrid = MSFG1 
    For  i = 0 To myMSHFlexGrid.rows - 1 
      A = myMSHFlexGrid.TextMatrix(i,1)
    Next
  ElseIf TypeOf MSFG1 Is MSFlexGrid Then
    Set myMSFlexGrid = MSFG1 
    For  i = 0 To myMSFlexGrid.rows - 1 
      A = myMSFlexGrid.TextMatrix(i,1)
    Next
  End If

End Function

另一种方法是定义两个gridloop函数,每个类型一个。手动重载的一种形式。

Public Function gridloop_MSHFlexGrid(MSFG1 As MSHFlexGrid) As Long
Public Function gridloop_MSFlexGrid(MSFG1 As MSFlexGrid) As Long

这样做的好处是,尝试gridloop使用“不正确”控件调用其中一个函数将导致编译错误 - 及早发现问题,否则可能需要花费大量时间执行运行时调试。


推荐阅读