vb6 - 与 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
有什么办法可以加速吗?
解决方案
问题中没有太多细节,我想你有两个(或更多?)不同的控件,你试图从本质上重载你的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
使用“不正确”控件调用其中一个函数将导致编译错误 - 及早发现问题,否则可能需要花费大量时间执行运行时调试。
推荐阅读
- git - ServicePointManager 不支持使用 net4bsl.bsl.co.uk 方案的代理
- c# - unity c# 射击游戏在玩家死亡时停止克隆
- python - Selenium ChromeDriver:无法设置用户数据目录
- ios - 如何在 iOS 中将文本字段分隔为数字格式的逗号?
- rabbitmq - RabbitMQ 升级后丢失配置
- kotlin - 如何在 Kotlin 中存储和检索单例类的对象
- c# - 尝试通过参数和 Oledb 在文本框中按用户名创建搜索数据库
- microsoft-graph-api - 使用 Graph API 为现有有效订阅续订邮件订阅时收到 ExtensionError
- java - 如何通过 onClick 事件更改 RecyclerView 中的所有元素?
- c++ - 将 std::weak_ptr 传递给函数有用吗?