影响程序运行的速度有哪些?如何切割程序?(200分)

  • 主题发起人 主题发起人 xzg163
  • 开始时间 开始时间
X

xzg163

Unregistered / Unconfirmed
GUEST, unregistred user!
1.本人用MSSQL SERVER 做数据库,编了一些东东,发现在打开数据进行浏览,其速度比
其他数据库(INTERBASE,PARADOX)要慢,哪位大侠能指点一二,以提高运行速度。当然,
硬件上的改进就不要提了,主要是在DELPHI所编的程序中。
2.通过一段时间的编程练习,发现,DELPHI所编好的EXE文件动不动就是几兆,应该如何
在编程时采取哪些设置(例如环境设置)可以使EXE文件尽量小。
3.同时我有一个想法,为了能够使程序运行时少占内存,是否可以把一个完整的程序分块,
然后在运行时进行调用与释放,这个想法是否有点象WINDOW用RUNDLL 运行DLL 文件一样?
 
1.你是用何种方式连接的? 如果是MSSQL SERVER 7最好用ADO连接.且用OLE DB Provider for
SQL Server,同时注意你的ado版本,安装mdac_typ.exe 2.6可确保你的驱动是最新的.
尽量使用客户端的CursorLocation,注意cachesize的大小.李维的书对此有详细的阐述.
2.DELPHI所编的EXE文件大主要是由于vcl的框架比较大.环境设置中可去掉调试消息
3.一般做法是除了主窗体和很常用的一两个form外,其他的form都动态生成.
 
1、SQL Server 不存在速度问题,浏览可能稍微慢一点,但是同你的程序设计方式有关,
评价数据库服务器速度不能用这个指标,关键是数据处理速度和吞吐量。
2、Delphi EXE 主要是 VCL 运行包很大,你可以选择把 VCL50.BPL 放在外部,这样 EXE
会小一些。
3、DLL 可以部分解决这个问题,但是 Windows 下没有程序分块的概念了。
还有注意不要把图片资源放进 EXE 中。
 
1,SQL SERVER 只有在数据量非常庞大的时候才会出现性能下降比较厉害的情况,
一般的应用不会特别慢的。我在前几天,因为计算机设备太紧张,使用了一台
P100+16M+WIN95的计算机安装了SQL SERVER 7.0的桌面版,结果使用还是挺好的。
2,我觉得你很可能是在程序中使用了大量的图片,比如IMAGE控件。DELPHI本身
的代码编译质量很高,非常的紧凑,不会象VC那样轻易出现代码膨胀到几兆的情况,
如果是使用了较多的IMAGE,你可以考虑将BMP图象转为JPG放到程序里,会很有效。
如果真的代码量如此巨大,你可以将一个程序分成一个程序包,使用方法很简单:
在PROJECT菜单中选OPTIONS,在弹出的窗口中选PACKAGES页面,然后把
Build with runtime packages给选上就行了。这样你的程序体积就会急剧减小。
不过运行时需要找到那个VCL50.BPL,就象巴酷巴酷说的那样。
3,你的想法挺好,不过刚开始的时候也不用想那么多,因为WINDOWS自己已经在
尝试那么做了,不信你在系统资源比较紧张的时候打开你程序的另一个窗口或页面
什么的,就会发现硬盘狂闪,因为这个时候相关的代码才真正的被加载进来。
yangkee说的动态创建和释放FORM的方法是能从根本上起作用的,当然,所有的对象
理论上都可以在主程序运行期间临时创建和释放的。只不过要多写写代码了。
祝顺利。
 
1.我编程时是采用BDE直接配置,在终端上安装SQLSERVER CLIENT进行的。
我发现慢的缘故在于,我一般在ON SHOW 时,让表的ACTIVE:=TRUE,在
DBGRID 中进行浏览,一旦如此作,在打开FORM时,其调用速度就很慢。

另外,我怀疑我的程序慢的原因是否在表的设计上,因为我在调用一些表时
利用LOOKUP 的方法,进行增加一些LOOKUP 字段,也许有了这些字段影响表
打开的速度。
2.在PROJECT 中 Build with runtime packages给选上,我是试过,的确会
减少很多,但在安装时需要拷贝该文件,同时这种做法也不会减少运行时所占
的内存,不能加快程序的运行。

3.本来可以把程序分成几个子程序,然后来用EXECECUTE函数来调用,但这样作,
没有通过主程序,直接在外部也可以执行,我的想法主要是让主程序分别调用
一些子程序的形式来执行,但两者之间需要传递一些参数,不知道有什么办法
可以实现。
 
用命令行参数不就行了,如
ShellExecute(Handle,'open',PChar(progname),PChar(Param),PChar(Path),SW_SHOWNORMAL);
然后在你的字程序中对参数进行较检不就可以了。取得参数的方法是在程序重用
ParamStr(i)函数,其中i代表第几个参数。
 
CursorLocation 设置为 server 是比较快的。(除非某些功能不支持,没办法才用
client端的cursor)

sql server很吃内存,注意分配尽可能多的内存给他,但是要看物理内存来设定上限

为了能够使程序运行时少占内存,把一个完整的程序分块,然后在运行时进行调用与释放
想法好是好,调入调出的,一、花时间,二、写起来麻烦,其实这点内存算不了什么,
不必要花时间在这里。

 
你不会是用Table 来连接SQL数据库吧,如果是这样的话,你就S定了。呵呵

另两个问题,楼上的朋友已经说得差不多了。 :)
 
教父:
我有时候是用TABLE,有时候也用QUERY来连接的,不知道兄弟能多指点一二。
 
1.尽量用query,因为table会比较慢,只要你的数据量不是非常大,或者是大量图片
速度应该没有问题。
2.你可以用Aspack对exe文件压缩,压缩效果很好,而且压缩后可以直接使用。
3.在project中将其它非主窗体设置为动态创建,打开窗体时你可以这样用
form1.showmodal;
form1.free;
 
Aspack压缩程序的时候是不是不能有ADO对象存在?
前一阵子压了个程序发现不能用。//faint
谁可以指教一下aspack的工作原理。谢过了先。
 
我用aspack压过有ADO的程序,没有问题
 
xzg163:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部