我想从另一个方面来观察这个问题.
先整理一下:
已经提出的解决方法主要有:
A: 采用 mainApp+DLL 调用;
B: 采用TSession 或 Tdatabase来减少 database.Connect;
C: 动态建立Form
D: 动态调用Package
期望达到的效果为:
A: 降低分析和编程复杂度,加快EXE调用速度;
B: 减少 database.connect次数;
C: 减少 EXE启动速度;
D: 减少 EXE文件大小,也提高启动速度.
我认为,正如aimingoo所说,采用DLL并没有带来启动速度实质上的提高.
唯一有效的是可以先让用户看到主界面,把启动时间分成了两部分.
但它在软件工程上的效率是有目共睹的,所以是一个好办法.
动态创建组件或form,我认为这不是一个好办法.
从编程代价和带来的效率提高上来说,动态创建组件或form,需要程序员较高的
编程能力和逻辑思维水平,并且并不利于维护.谁也不能保证,3年或5年后你还在
这家公司,或者接替你的人具有和你同样的水平和习惯.
我宁愿使用Delphi本身提供的编程习惯.
使用Tsession传递,我认为是一个好方法.
如我在本版另一个问题的讨论中所说,一个Team的编程任务由系统程序员和应用程序
程序员共同完成.和动态创建组件不同,采用TSession,是可以由系统程序员开发
BasicForm和编程规则时制定的,应用程序编写时,如果采用继承Form的方法(我认为
是标准方法),时可以完全不管不顾的.这没有增加程序员的工作量和强度,也没有增
加维护代价.
事实上,编写数据库应用程序,制约速度的因素有如下几个:
1. Server端的效率.
2.client 端 Delphi 应用程序的效率
3.C/S 之间交换数据的效率.
从用户角度来说,感到速度慢,主要在于程序启动的速度和模块转换的速度.
以上涉及的都是有关于问题2的解决方法.
加快C/S交换数据速度等于减少传递量.
大部分的程序,都是实时更新表的,但PB里的数据窗口可以给我们以提示.
PB中,数据窗口只有在必要时才会去和数据库联系.
所以,在编程时,要尽量减少TransBegin...Commit的次数,比如只在修改完毕整个
表时才commit;只在涉及多个表更新时才commit等.
我认为,减少流量,是真正有效的,因为当Client增多时,影响效率的因素中Client
端实现上的问题会降到比较低的层次上去,主要是等待问题.