|
本帖最后由 |流年灬一逝| 于 2012-9-24 21:24 编辑
有些人认为API函数就是王道,用它可以代替易语言某些支持库。
每一次调用一个API,即使是1个API,那么程序也会将整个DLL文件加载一下,当然,是在你没有做绑定DLL的前提下.
有些人说:
加载一下?不就是LoadLibrary吗?
其实不是的。系统在打开一个程序之前,会把所有用到的DLL文件进行处理,处理,即写入IAT表(即导入表)、INT等,完成这些操作,是非常之慢的.除非你在之前绑定了DLL.
因此,建议大家不要使用太多的API,声明我不知道,我只知道使用了API,就得把整个DLL处理,哪怕你的程序只是调用了一个API函数
有些人也说,那易语言支持库是不是也要加载DLL啊?
是的,易语言支持库相当于一个DLL,编译出易程序后,会把所有的支持库进行一次load。
有些API函数,通过逆向完全可以代替,网上也有一些API逆向的文章,读一下他们,用汇编代替一下,跟LOAD相比,效率简直省了多少。
楼下的朋友也说“这点效率”,我想说,效率都是堆积成的,为什么大型游戏,尤其是3d,基本要用纯汇编来写?
原因就在于汇编效率很高,但是为了这点效率,多少程序员在日夜的想算法,华为公司累死员工就是一个例子。
对于易语言程序来说,效率就更为重要了,有做过逆向的朋友可能知道,易语言四则运算,基本都是浮点数操作,这让CPU丢失多少效率?
CPU周期在你写一个算法之中就一个一个的丢失,这点效率难道不重要?
LOAD一下DLLLIBRARY,对磁盘数据拷贝,这又是多少效率?
当然,发此贴的目的不是让大家禁掉API,而是让大家知道,API也有利弊的,能不用尽量不用,API函数也很强大,它是写WINDOWS的必须,但是我建议大家尽量只使用 KERNEL32,USER32,GDI32这三个windowschildsystem,因为用他们既可以保证程序的功能强大,也可以保证浪费不必要的LOAD,剩下一点效率,如果大家以后写商业软件,这点效率会减少很多崩溃的用户。
|
|