编程的几个问题,谢谢
2、想让程序模块化,运行主程序框架。其他处理放DLL中,这种调用DLL会使程序运行效率降低吗?如果降低,降低程度有多少?
3、DLL有初始化代码。想问,主程序运行时就开始加载调用的DLL还是用到DLL命令时才会去加载?如果加载,那DLL初始化代码是否只执行一次?
-------------
望不吝赐教,随随便便,简单一概而过的勿答谢谢 展开
子程序2是否是多线程,由你调用的方式决定。如果用创建线程方式调用2,那么2就是另一个线程,否则,2就是从属于线程1的过程(当然,前提是1是以线程方式创建的);子线程再创建的子线程是否是同步执行的问题也是一样,默认是同步执行的,当然也可以使用异步线程和线程信号灯等方式控制多线程的相互影响。
放到DLL会降低效率,但这个降低非常小,是毫秒级的。只要不是多个DLL圈套圈的来来回回调用,这个效率的影响完全可以忽略不计。(当然,这里说的是传统DLL,而不是组件式DLL,组件化的效率牺牲比较大,不是毫秒级的)
不是所有的DLL都有初始化代码的。而组件方式的初始化,和传统DLL的初始化也有很大差别。一般来说,决定在哪里加载和初始化,有两个方面确定:a) 有些DLL组件必须在程序开始就初始化而且不能反复加载,这个没得说,必须按要求来;b) 不是必须初始加载的DLL,采用哪种方式是由效率和资源消耗的对比来决定的,如果经常使用并且初始化耗时较多,那么就应该初始化一次,如果dll只在某个局部使用并且使用频率很低,临时加载并在使用后释放是完全可以的。
关于3,简单的总结一下。大部分DLL都是采用初始化一次加载,因为临时加载效率更高的情况很少,这里有占用资源问题,也有程序的不可预期性问题。