精易论坛

标题: 在你的程序中,不要调用太多的DLL库!! [打印本页]

作者: ForeverLover    时间: 2012-3-4 22:47
标题: 在你的程序中,不要调用太多的DLL库!!
本帖最后由 |流年灬一逝| 于 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,剩下一点效率,如果大家以后写商业软件,这点效率会减少很多崩溃的用户。


作者: ForeverLover    时间: 2012-3-4 23:12
Sofa is mine.
作者: 恭喜    时间: 2012-4-12 10:05
收藏了  ,,等有一定基础了  在来理解
作者: 小磊    时间: 2012-4-20 23:40
难道你指望吴涛用纯汇编帮你写支持库么
作者: ForeverLover    时间: 2012-4-20 23:48
小磊 发表于 2012-4-20 23:40
难道你指望吴涛用纯汇编帮你写支持库么

支持库是DLL的,DLL也可以用其他语言写出来.
作者: 小磊    时间: 2012-9-3 21:35
那支持库里面本来就有API,用了以后不是慢上加慢?
作者: 虚心进步    时间: 2012-9-24 07:34
楼主 说实话. 你说别人智商有问题.往往自己就有.

不要用太多API.  会导致程序开启时速度慢..      这个理由让我感觉蛋疼..  计算机计算速度知道是多少吗.在么这个慢?

API最主要优点让编程变的容易了..  但另一方面弊端是.离开了WINDOS平台.. 变得完全不会!


作者: ForeverLover    时间: 2012-9-24 12:28
虚心进步 发表于 2012-9-24 07:34
楼主 说实话. 你说别人智商有问题.往往自己就有.

不要用太多API.  会导致程序开启时速度慢..      这个 ...

我觉得你智商也有问题。
我是说尽量不用。但没说不让用。
像CreateWindowEx这类函数,不用是不行的.
但是像获取一些东西,比如获取调试器标志。逆向一下就可以知道,网上也有些逆向API的文章,直接照着这些汇编用不必调用系统提供的快?
计算机速度快是快,但对于我们这些讲究效率的来说,这点效率不能忽视。
希望你以后看清楚帖子再说。
作者: 万亿小甄    时间: 2012-10-6 12:34

收藏了  ,,等有一定基础了  在来理解
作者: fangbaiyu    时间: 2012-10-23 17:19
先收下良师警句
作者: xiedongkai    时间: 2012-11-2 09:42
个人觉得说得有一定道理




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4