关于vfp声明api函数的小发现

taohua300 2012-03-09 01:37:19
加精
前不久偶然看到了 dkfdtf 版主N久前发的一个贴子,这里做了在没有动摇根本的情况下做了少许修改并加以说明
测试环境 Win xp sp3 + vfp 9.0 sp2 7423 + 1G内存 + 闪龙 3000+ CPU

1.先看测试代码

CLEAR
CLEAR DLLS
m.nStart = SECONDS()
FOR m.ii = 1 TO 5000
Declare long GetDesktopWindow In WIN32API
ENDFOR
? 'win32api', SECONDS() - m.nStart

CLEAR DLLS
m.nStart = SECONDS()
FOR m.ii = 1 TO 5000
Declare long GetDesktopWindow In user32
ENDFOR
? 'user32.dll', SECONDS() - m.nStart


运行这段代码发现,这两种声明api函数的方式竟然有如此大的速率差异
为什么会有如此大的差异 ?
2. 再看看这段测试代码
CLEAR
CLEAR DLLS
m.nStart = SECONDS()
FOR m.ii = 1 TO 5000
Declare long GetDesktopWindow In WIN32API
GetDesktopWindow()
ENDFOR
? 'win32api', SECONDS() - m.nStart

CLEAR DLLS
m.nStart = SECONDS()
FOR m.ii = 1 TO 5000
Declare long GetDesktopWindow In user32
GetDesktopWindow()
ENDFOR
? 'user32.dll', SECONDS() - m.nStart


注:执行这段代码的时候vfp会出错,但并不影响结果
结果发现,调用api函数用的时间几乎是相同的,并且极短极短
3. 再看一下分开执行时操作系统都干了什么
这里借助了微软的 Procmon 工具

CLEAR DLLS
m.nStart = SECONDS()
FOR m.ii = 1 TO 5000
Declare long GetDesktopWindow In WIN32API
ENDFOR
? 'win32api', SECONDS() - m.nStart


35707	13:37:53.7541662	vfp9.exe	3080	进程剖析		成功	用户时间: 3.0625000, 内核时间: 7.7343750, 私有字节: 7,008,256, 工作集: 13,340,672
35760 13:37:54.7744738 vfp9.exe 3080 进程剖析 成功 用户时间: 3.0781250, 内核时间: 7.7343750, 私有字节: 7,008,256, 工作集: 13,340,672
35808 13:37:55.7673006 vfp9.exe 3080 进程剖析 成功 用户时间: 3.0781250, 内核时间: 7.7343750, 私有字节: 7,008,256, 工作集: 13,340,672
35856 13:37:56.4924458 vfp9.exe 3080 FASTIO_NETWORK_QUERY_OPEN D:\test1\pro1.prg 不允许快速IO
35857 13:37:56.4925430 vfp9.exe 3080 IRP_MJ_CREATE D:\test1\pro1.prg 成功 访问期望: 读取属性, 安排: 打开, 选项: 打开重解析点, 属性: n/a, 共享模式: 读取, 写入, 删除, 分配的大小: n/a, 打开结果: 已打开
35858 13:37:56.4927062 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.prg 成功 Type: 查询基本信息-文件, 创建时间: 2012-3-7 15:48:43, 最后访问时间: 2012-3-9 13:35:27, 上次写入时间: 2012-3-9 13:35:28, 更改时间: 2012-3-9 13:35:27, 文件属性: A
35859 13:37:56.4927718 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1\pro1.prg 成功
35860 13:37:56.4927905 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1\pro1.prg 成功
35861 13:37:56.4928230 vfp9.exe 3080 IRP_MJ_CREATE D:\ 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35862 13:37:56.4928626 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1 成功 Type: 查询目录, 过滤器: test1, 2: test1
35863 13:37:56.4928939 vfp9.exe 3080 IRP_MJ_CLEANUP D:\ 成功
35864 13:37:56.4929090 vfp9.exe 3080 IRP_MJ_CLOSE D:\ 成功
35865 13:37:56.4929917 vfp9.exe 3080 IRP_MJ_CREATE D:\test1 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35866 13:37:56.4930319 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1\pro1.PRG 成功 Type: 查询目录, 过滤器: pro1.PRG, 2: pro1.prg
35867 13:37:56.4930590 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1 成功
35868 13:37:56.4930735 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1 成功
35869 13:37:56.4990838 vfp9.exe 3080 IRP_MJ_CREATE D:\test1 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35870 13:37:56.4991542 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1\pro1.prg 成功 Type: 查询目录, 过滤器: pro1.prg, 2: pro1.prg
35871 13:37:56.4991972 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1 成功
35872 13:37:56.4992129 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1 成功
35873 13:37:56.4993657 vfp9.exe 3080 IRP_MJ_CREATE D:\test1\pro1.FXP 成功 访问期望: 正常读取, 安排: 打开, 选项: 同步 IO 无提示, 非目录文件, 属性: N, 共享模式: 读取, 分配的大小: n/a, 打开结果: 已打开
35874 13:37:56.4994204 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.FXP 成功 Type: 查询标准信息-文件, 分配的大小: 352, 文件末尾: 347, 链接数: 1, 删除被挂起: 假, 目录: 假
35875 13:37:56.4994372 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.FXP 成功 Type: 查询基本信息-文件, 创建时间: 2012-3-7 15:49:24, 最后访问时间: 2012-3-9 13:36:04, 上次写入时间: 2012-3-9 13:36:06, 更改时间: 2012-3-9 13:36:04, 文件属性: A
35876 13:37:56.4995453 vfp9.exe 3080 FASTIO_NETWORK_QUERY_OPEN D:\test1\pro1.prg 不允许快速IO
35877 13:37:56.4996261 vfp9.exe 3080 IRP_MJ_CREATE D:\test1\pro1.prg 成功 访问期望: 读取属性, 安排: 打开, 选项: 打开重解析点, 属性: n/a, 共享模式: 读取, 写入, 删除, 分配的大小: n/a, 打开结果: 已打开
35878 13:37:56.4997747 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.prg 成功 Type: 查询基本信息-文件, 创建时间: 2012-3-7 15:48:43, 最后访问时间: 2012-3-9 13:35:27, 上次写入时间: 2012-3-9 13:35:28, 更改时间: 2012-3-9 13:35:27, 文件属性: A
35879 13:37:56.4998381 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1\pro1.prg 成功
35880 13:37:56.4998557 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1\pro1.prg 成功
35881 13:37:56.4998856 vfp9.exe 3080 IRP_MJ_CREATE D:\ 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35882 13:37:56.4999222 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1 成功 Type: 查询目录, 过滤器: test1, 2: test1
35883 13:37:56.4999510 vfp9.exe 3080 IRP_MJ_CLEANUP D:\ 成功
35884 13:37:56.4999652 vfp9.exe 3080 IRP_MJ_CLOSE D:\ 成功
35885 13:37:56.5000381 vfp9.exe 3080 IRP_MJ_CREATE D:\test1 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35886 13:37:56.5000758 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1\pro1.PRG 成功 Type: 查询目录, 过滤器: pro1.PRG, 2: pro1.prg
35887 13:37:56.5001021 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1 成功
35888 13:37:56.5001163 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1 成功
35889 13:37:56.5001965 vfp9.exe 3080 IRP_MJ_CREATE D:\test1 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35890 13:37:56.5002340 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1\pro1.prg 成功 Type: 查询目录, 过滤器: pro1.prg, 2: pro1.prg
35891 13:37:56.5002647 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1 成功
35892 13:37:56.5002789 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1 成功
35893 13:37:56.5003717 vfp9.exe 3080 IRP_MJ_CREATE D:\test1 成功 访问期望: 读取数据/列出目录, 同步, 安排: 打开, 选项: 目录, 同步 IO 无提示, 属性: n/a, 共享模式: 读取, 写入, 分配的大小: n/a, 打开结果: 已打开
35894 13:37:56.5004094 vfp9.exe 3080 IRP_MJ_DIRECTORY_CONTROL D:\test1\pro1.PRG 成功 Type: 查询目录, 过滤器: pro1.PRG, 2: pro1.prg
35895 13:37:56.5004384 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1 成功
35896 13:37:56.5006779 vfp9.exe 3080 IRP_MJ_CLOSE D:\test1 成功
35897 13:37:56.5007175 vfp9.exe 3080 IRP_MJ_READ D:\test1\pro1.FXP 成功 偏移量: 0, 长度: 347
35899 13:37:56.5007891 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.FXP 成功 Type: 查询基本信息-文件, 创建时间: 2012-3-7 15:49:24, 最后访问时间: 2012-3-9 13:36:04, 上次写入时间: 2012-3-9 13:36:06, 更改时间: 2012-3-9 13:36:04, 文件属性: A
35900 13:37:56.5008139 vfp9.exe 3080 FASTIO_QUERY_INFORMATION D:\test1\pro1.FXP 成功 Type: 查询标准信息-文件, 分配的大小: 352, 文件末尾: 347, 链接数: 1, 删除被挂起: 假, 目录: 假
35901 13:37:56.5008312 vfp9.exe 3080 FASTIO_READ D:\test1\pro1.FXP 成功 偏移量: 41, 长度: 306
35902 13:37:56.5328289 vfp9.exe 3080 IRP_MJ_CLEANUP D:\test1\pro1.FXP 成功
35934 13:37:56.7444695 vfp9.exe 3080 进程剖析 成功 用户时间: 3.0937500, 内核时间: 7.7812500, 私有字节: 7,008,256, 工作集: 13,340,672
...全文
3446 105 打赏 收藏 转发到动态 举报
写回复
用AI写文章
105 条回复
切换为时间正序
请发表友善的回复…
发表回复
taohua300 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 104 楼 的回复:]

嗯,貌似也有道理
如果你说:“我口袋里只有整整 101 块钱”,我也没有办法,数学上 101 确实是个整数
哈,哈,hhh,...
[/Quote]

数学上 101确实是个整数,但经常说的是有整100
前面开了个小玩笑

还有,公司东边有个小高层,有整整27楼

都市夜猫 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 101 楼 的回复:]
貌似所有的楼数都是整数
[/Quote]
嗯,貌似也有道理
如果你说:“我口袋里只有整整 101 块钱”,我也没有办法,数学上 101 确实是个整数
哈,哈,hhh,...
longlin220 2012-04-28
  • 打赏
  • 举报
回复
学习了
我是小数位 2012-04-25
  • 打赏
  • 举报
回复
2.3四核CPU,4G内存,WIN7系统,、
结果
WIN32API 0.031
USER32.DLL 0.0876
taohua300 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 的回复:]

占个整数楼玩玩
[/Quote]

貌似所有的楼数都是整数
都市夜猫 2012-04-25
  • 打赏
  • 举报
回复
占个整数楼玩玩
joejhj 2012-04-25
  • 打赏
  • 举报
回复
听君一席话,胜读十年书
everyday1212 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 86 楼 的回复:]
和VB6一样老掉牙的东东呵呵。
[/Quote]

我在WIN7上用VFP6没问题。
靠VFP吃饭的会觉得局限,
如果为了帮助处理一些日常工作,VFP、ACCESS足够,技术老不老有什么关系呢
sdta2012 2012-03-29
  • 打赏
  • 举报
回复
听君一席话,胜读十年书。
狂龙骄子 2012-03-28
  • 打赏
  • 举报
回复
用了这么多年,还真没有深入研究,汗~~
bearfoxmi 2012-03-20
  • 打赏
  • 举报
回复
看的是一头雾水啊
lingfengxue98 2012-03-19
  • 打赏
  • 举报
回复
看的是一头雾水啊
nettman 2012-03-19
  • 打赏
  • 举报
回复
分析过程很有趣,感谢楼主分析!
youhao1999 2012-03-18
  • 打赏
  • 举报
回复
多谢楼主分享
CCLOVEYA 2012-03-16
  • 打赏
  • 举报
回复
高手 哈哈
ah_2046 2012-03-15
  • 打赏
  • 举报
回复
和VB6一样老掉牙的东东呵呵。
ebinbin1 2012-03-15
  • 打赏
  • 举报
回复
学习了一下,对这方面还不是很清楚。
紫寒尺 2012-03-14
  • 打赏
  • 举报
回复
测试环境 Win 7 sp1 + vfp 9.0 sp2 7423 + 6G内存 + i5-2410 2.3G CPU
然后测试1.中的代码,结果如下:
win32api 0.024
user32.dll 0.438

测试2.中的代码,结果如下:
win32api 0.028
user32.dll 0.476
qq25592365 2012-03-13
  • 打赏
  • 举报
回复
哇,看不懂
Wendy93 2012-03-13
  • 打赏
  • 举报
回复
感謝分享~學習之~
加载更多回复(47)

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧