Delphi程序使用资源的释放

Delphi程序使用资源的释放,第1张

 写出一个不会造成资源分配崩溃的Delphi应用程序的关键是确保如果程序中分配了资源 即使当故障发生 程序也应能释放占用的资源

文件 内存 WINDOWS资源和对象是一些必须时时加以注意的需确保释放的资源 下面的事件控制代码例子中先分配了内存 然后产生了一个错误 而造成它不再执行释放内存的程序代码

ProcedureTForm .ButtonlClick(Sender Tobject)

Var

Pointer Pointer

Integer Numzero Intger

begin

Numzero Κ

GetMem(Pointer ) {分配 K的内存资源}

Integer Κ divNumzero {此句产生一个除法错误}

FreeMem(Pointer ) {这里此句将不被执行}

end

尽管大多数错误不会这样明显 但上例包含了重要的一点 当错误产生后 程序执行跳出模块 其后的资源释放程序代码不再被执行 为了确保上例中的FreeMem能够释放被GetMem占用的内存资源 必须把代码放入一个资源保护模块

这里给出一个曲型的资源保护模块的格式

{资源的分配}

try

{资源的使用}

finally

{资源的释放}

end

上面的try...finally模块可以使程序总能执行finally部分中的任何程序代码 即使有错误在保护模块中产生 当try部分中的某一条代码执行引起错误时 执行将直接跳到finally部分 若执行中没有错误产生 则程序按正常顺序执行

在下面的事件控制代码例子中先分配了内存 然后产生了一个错误 但是仍然执行了释放内存的程序代码

ProcedureTForm .Button Click(Sender Tobject)

Var

Pointer Pointer

Integer Numzero Integer

begin

Numzero Κ

GetMem(Pointer ) {分配 K的内存资源}

try

Integer Κ divNumzero {此句产生一个除法错误}

finally

FreeMem(Pointer ) {这里此句仍将被执行}

end

end

lishixinzhi/Article/program/Delphi/201311/25084

delphi 编译生成的 exe 文件,占用磁盘字节数比较大的原因在于,delphi 编译的文件中包含有其他的数据信息更多。

以下在 delphi xe 10 中,建立一个只包含空窗体的工程,通过多种配置进行编译,生成的 exe 文件大小的测试:

1、通常 delphi 的文件为了调试方便,默认新建工程进行编译的 exe 文件,是包含有 Debug 信息的,其生成的 exe 文件大小约为10.5M:

2、如果将去除调试数据,使用发布版(Release)进行编译,则生成的文件大小约 2.1 M,exe 文件占用大幅减少,可见 debug 占用了很大的磁盘空间:

3、进一步关闭 RTTI(Run-Time Type Information) 反射机制,最后生成的exe 文件约 1.69M:

简单经过以上3步,delphi 生成的 exe 文件大小已经从最初的 10.5 M,减小到 1.69 M。

此外,诸如:低版本的 delphi 使用 AnsiString 作为缺省字符集,而高版本使用 UniCode 作为字符集等因素,也会使得 exe 文件增大。

Delphi 编译的程序体积大的原因有以下几点:

1、delphi 有 RTTI 机制,此反射机制占用大量字节。

2、缺省使用 debug 编译,debug 占用大量字节。

3、使用第三方控件,占用相应的字节。

4、编译时,delphi 将 runtime 运行包打包进 exe,也会导致 exe 变大。

建议可以尝试将 RTTI 机制关闭、用 release 发布,在看看文件是否变小了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8092891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存