展示一下成果:“在VB6中实现移位操作”的各种实现方法速度比较

舉杯邀明月 2016-10-16 07:21:24
今天下午,经过N次的程序崩溃,终于把“机器代码注入”实现移位的方法搞好了。


写了一个简单的测试比较程序,进行了一下对比。
“算术运算模拟”直接出局,就不用它来参与了。
记得以前搜索VB6移位算法代码时,居然看到很多在“计算”时用For循环的:
  移多少位,就要执行多少次乘法或除法。 狂汗…………
约在十年前,自己封装的通过算术运算来移位的模块,自己明白这种方法运行效率很低;
  但受于水平限制,也没有别的办法,只能用那个。
前两天写测试对比程序,才知道这种方法的效率低得无可救药了。 

这儿只比较了4种算法的,并且都以“左移位”相同的操作数和移位数来对比(实际效率跟这两个都没关系)。
其中【 ASM + CallWindowProc 】、【 机器指令注入 】、【 “轻量级”COM对象 】 的各种移位操作效率不变。
【 系统 API 】用到的系统函数只支持“单向移位”,要实现“循环移位”又得进行“组合处理”,
  速度几乎又是“减半”了(跟自己的“单向移位”相比)。

测试环境的主要参数如下:
系统: Win7 旗舰版 64位 SP1
CPU: 1.7G 双核四线程(移动版 i5 - 4210U )
内存: 8G DDR3

运行效果截图:


测试代码:
...全文
872 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2017-07-06
  • 打赏
  • 举报
回复
支持一下. 现在我挺少上来了哈哈. VB6的潜力还是不少,挖一挖还是有宝的.
MeThee 2017-01-04
  • 打赏
  • 举报
回复
怪我水,skyDrive里下载的跟本网下载的一样,也是dll
MeThee 2017-01-04
  • 打赏
  • 举报
回复
那个数组的我在skyDrive里面下载了 原以为是地址坏了,原来是需要梯子
MeThee 2017-01-04
  • 打赏
  • 举报
回复
本帖的代码木有看到,楼主应该还没有上传 还有这个帖子的,事隔多年了,可否上传给新手们(例如我)学习了 http://bbs.csdn.net/topics/310057075
  • 打赏
  • 举报
回复
用ATL创建COM组件详细解说 - ice197983 - C++博客 http://www.cppblog.com/ice197983/articles/4178.html 创建 COM 服务器组件实例,获得组件接口指针 IMyCom *ptr = NULL; hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMyCom),(LPVOID*)&ptr); 内存中加载flash.ocx控件并从内存中加载swf文件资源后播放之 - KeyGen的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/xsolver/article/details/8777122 内存中加载flash.ocx控件并从内存中加载swf文件资源后播放之 需求: ----1.在一台既没有安装Flash ActiveX控件,也没有Stand Alone版本的flash播放器的机器上,如何播放做好的绚丽的flash动画? ----2.或者使用flash做界面的应用程序,为了防止客户误操作卸载控件导致程序不能正常运行; ----3.制作电子书等一类,交互性好的单文件应用程序,不释放swf文件或flash控件到本地硬盘,而正常运行。 这是比较复杂但是并不难解决的问题,几个简单问题的叠加而已,各个击破。Mix it up, Done, Enjoy : ----1.内存资源中加载dll; ----2.操作ocx,主要的COM编程,获取控件工厂类,得到其OLE对象,好了问题搞定了80%了; ----3.内存资源中加载swf文件,这个啊,其实也就几行代码,加载之,播放之; ----4.显示,可视化,so easy; ----5.等等,万里长征第一步,消息是如何传递的?fscommand/ExternalInterface.call()等一杆子消息咋办呢?这是个头疼的问题,搞定它们; ----6.Enjoy!
  • 打赏
  • 举报
回复
研究一下如何把OCX,当成资源文件,然后用ATL方式显示到窗体上,(不需要解压注册OCX) 这样把一个FLASH.OCX和一个*.SWF文件加载到资源文件就能直接播放FLASH了
  • 打赏
  • 举报
回复
非常专业呀,向你学习。VB这么老还有人在啃,就怕WIN10,及以后系统,微软故意不让VB运行。VC+6都可以,凭让VB6写的程序运行呀,这*** 第一个是MSVBVM60.DLL,其他还有什么原因呢? VB这一算都有20年历史了吧(1998-10 Visual Basic 6.0)
maggie747576 2016-11-18
  • 打赏
  • 举报
回复
请问大神,本人在某网络平台受骗,能否通过网络找到诈骗者?他们还在继续行骗中,因为每个人被骗金额都不超过两千,不能立案,被骗的人全国各地的都有,不好取证。所以我希望找到网络高手能把他们找出来。。请大神帮忙。。
笨狗先飞 2016-10-24
  • 打赏
  • 举报
回复
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
使用电脑计时有时误差会很大,因为待测程序段的运行会影响电脑时钟。 将待测程序段循环足够多次,手动掐秒表计时可能更准确。 《The Intel 64 and IA-32 Architectures Software Developer's Manual》
舉杯邀明月 2016-10-16
  • 打赏
  • 举报
回复
【 机器指令注入 】实现移位操作 速度最快,可惜只能在编译后才有效,那个接口不可以在IDE下调用。 其它的算法实现,都是可以在IDE下运行的。

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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