分享
 
 
 

优化代码时要选用正确的测试方法

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

想提高VB效率的时候,常用测试来检验算法的优劣,但测试本身的“算法”却被忽略!这里我很想说一段“故事”:

我在研究一个Alpha运算的代码时,就感到了同样的问题:他把VB算法与API中的AlphaBlend做了比较,结果证明VB更快。因为我也写过一个Alpha运算的代码,所以针对他的源码做了分析,发现二者有两个不同,

一是他使用的是了DIB,而我的是基于DDB,所以他的速度很一致,而我的因涉及不同色深算法不同,自然速度也不一样,16位色处理始终慢些;

二是他使用了SafeArray结构指针,而我没有,我无法用这种指针的一个原因是,他的DIB位图是预先载入自己创建的DIBSection的,创建时便已获取了数据指针,这样就会比DDB少了一步数组复制过程。

指针并不是VB的独门绝技,难道,用了指针就会比C快?再看了一下那段代码用的测试方法,我才明白:DIB是预先载入的,计时的只是一个运算部分,AlphaBlend当然没有这个优先权,它虽然也是用这个DIB,但它没有其指针,它仍需先获取这个DIB数据,再处理,最后再输出回这个DIB,再由VB统一输出到屏幕,这当然慢。

其实用DIB处理的确简单,因为可以统一位图数据格式,一个算法便能适应所有色深。但我为什么后来没用DIB,原因就是一点:DIB慢呀,Alpha效果是一种屏幕动态效果,原始图都是基于DDB的,所以实际应用中是不会有现成的DIB可用的。

若使用DIB,必需得有一次转换,将DDB绘入新创建的DIBSection,别小看了这一次转换,我测试表明,用这种方式进行一次完整的Alpha处理,DDB绘入DIBSection的时间占整个处理时间的70%!!!

另一个让我大为吃惊的是,单独对运算部分计时,我发现用指针的算法,与我不用指针直接处理数组速度几乎一样。所以当把“从DDB做输入源,到重新输出回DDB”做为一个过程来看待时,我的DDB处理法比DIB法快了3倍多,但仍远慢于AlphaBlend,我对VB的指针用法更开始茫然。

所以各种测试一定不要离开实际应用这个范围,不然真会走入歧途。BlueDog() 的几个函数,除那个汇编外,与我在处理中使用的方法都一样,但我是内置于处理过程中的,不用说肯定比函数调用要快;汇编那段估计是调用一个利用C做移位运算的函数,就象我对CopyMemory速度都感到失望一样,做为一次函数调用,我对其速度也不敢抱太多幻想。

根据我反复测试的结果,我一直想推出一个让很多人大跌眼镜的结论:CopyMemory有时还没有用循环从数组直接取值快!

以前认为它快的结论是源于对测试条件的误解,在我们测试时,换有不同算法总是在调试环境下先进行比较的,在调试环境下用CopyMemory代替用循环从数组取值,会使速度明显提高,为什么?因为CopyMemory是已经过编译的函数!若循环也经过本机码编译,其就会比调用函数CopyMemory快了。因为它在同等执行方式下,省去了函数调用的开销。

不过CopyMemory在数据增大时速度下降不明显,而循环这方面就弱了,所以大数据还是建议用CopyMemory的,这个长度不好确定,由测试情况决定,一般32字节以上,还是值得调用一下函数的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有