设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: wang1999
打印 上一主题 下一主题

[API] 拷贝字符串速度之对比: CopyMemory 与 动态字节数组

[复制链接]

点击这里给我发消息

21#
发表于 2015-6-16 10:33:54 | 只看该作者
wang1999 发表于 2015-6-13 15:04
在vb里实现类的继承, 其实这个很简单:基本用Implements来实现, 如果你装有VB6的MSDN, 里面就有详细的示例 ...

implements 我用过,用抽象类 ,实现接口,同一个接口,可以派生不同的类,应该叫多态。在vb中一般用后期绑定,用抽象类后,可以,前期绑定抽象类。
implements在vba中没有。
vb中对父对象的属性,全部要重新封装的,.net的可以。
22#
发表于 2015-6-17 18:02:21 | 只看该作者
我前面说的继承,当然不是指implements。如果是implements接口继承,那就谈不上是什么汇集了大部分vb难点了。
我说的继承是指父子继承。当然也能够实现vb函数重载。不过还是算了,不谈这话题,扯远了。
23#
 楼主| 发表于 2015-6-23 16:07:23 | 只看该作者
本帖最后由 wang1999 于 2015-6-23 16:26 编辑

再补充 "=" VS  "LSET":
哪家强

结论如下:
'等号赋值
Private Sub CopyStringEqual()
    Dim s1 As String, s2 As String
    s1 = "123456"
    Debug.Print StrPtr(s1)
    s2 = "654321"
    s1 = s2
    Debug.Print StrPtr(s1)
End Sub
'Lset 赋值
Private Sub CopyStringLet()
    Dim s1 As String, s2 As String
    s1 = "123456"
    Debug.Print StrPtr(s1)
    s2 = "654321"
    LSet s1 = s2
    Debug.Print StrPtr(s1)
End Sub
还是说明一下
LSET的用法注意了,两边要相等,否则你试试 :0)

24#
 楼主| 发表于 2015-7-4 11:28:42 | 只看该作者
本帖最后由 wang1999 于 2015-7-4 11:57 编辑

最近自己将自己常用的VB函数,准备将其一部分用C重写为API(方便于excel或access调用,这样不用重写或复制代码了)
在深入编写API过程中发现很多VB的技术内幕,可以说VB就是COM技术的集合。

现在也完全明白了调用DLL的API的本质:分为动态调用及静态调用

动态调用:使用 Declare 申明(VB后台实则调用LoadLibrary进行加载)
静态调用:使用MIDL编写的TLB静态引用(直接二进制)

两者速度经过测试(环境有严格要求)
1,函数:1千万次*2行代码=(16(函数初始)+6(代码)=22条汇编指令),单位:毫秒,文件已编译
2. CPU全开,断网,清空后台,CUP空闲100%

结果如下:
动态调用
94
静态调用
62。得出每条指令2.818181818(1千万次)(共22条汇编指令)
两者相差了32毫秒,这应该就是动态调用,多用的时间,LoadLibrary 应该约12条汇编指令(前提是DLL已经加载到当前进程)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 13:10 , Processed in 0.091494 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表