EXE,资源和代码减少

时间:2009-01-06 10:35:04

标签: delphi memory resources

如何减少应用程序内的资源? 我尝试了很多技巧 我减少并重写代码,减少行号, 减少评论, 压缩最后的EXE,但这不是我想要的方式, 改进变量类型转换, 从应用程序内部删除ICON,BMP,JPG 我需要我的应用程序在最终EXE和一般资源消耗方面尽可能小。 任何更多的想法,关于这个主题的任何好文章 感谢

13 个答案:

答案 0 :(得分:10)

如何在项目选项中关闭调试信息:

  • 没有调试信息
  • 没有运行时检查
  • 尽可能减少外部设备的使用次数。

但调试信息可能是一个主要杀手。

答案 1 :(得分:9)

我不会花任何时间删除评论编译器将其删除

您可以从外部服务(例如Amazon S3)引用您的图像

答案 2 :(得分:8)

将程序使用多次的图像放入图像列表或TGraphic组件中,并将它们放入数据模块中。使用这些字形将所有组件链接到图像列表。如果使用Object Inspector将相同的字形添加到多个组件中,最终会有多个副本,从而增加了加载时间以及可执行文件和工作集大小。

答案 3 :(得分:7)

减少可执行文件大小的一个很好的技巧(实际上,PE图像大小,因为这也适用于DLL),当relocation不是问题时:

将重定位信息保留下来!

在Delphi中,你可以这样做:

// Remove relocation table (generates smaller executables) :
// (See http://hallvards.blogspot.com/2006/09/hack12-create-smaller-exe-files.html)
{$SetPEFlags 1} // 1 = Windows.IMAGE_FILE_RELOCS_STRIPPED

干杯!

答案 4 :(得分:4)

不要自动创建所有表单,即使Delphi现在为您提供选项,并且无条件地为早期版本中的新表单执行此操作。仅创建主窗体,并使用以下(伪)代码显示模式对话框:

procedure TMainForm.OptionDialog(Sender: TObject);
var
  Dlg: TOptionDialog;
begin
  Dlg := TOptionDialog.Create(nil);
  try
    // prepare dialog
    if Dlg.ShowModal = mrOK then begin
      // apply changed settings
    end;
  finally
    Dlg.Free;
  end;
end;

这将缩短应用程序加载时间并减少整体资源使用,尤其是对于具有许多控件的复杂对话框。

答案 5 :(得分:4)

删除VCL并使用KOL和MCK:http://kolmck.net/

这是一个激进而且非常大的变化,但会降低exe大小。

答案 6 :(得分:4)

先测量,然后优化。你的申请有多大,你希望它有多大?

你关心......

磁盘上的应用程序.EXE文件的大小?然后...

  • 使用 上的运行时软件包进行构建。你会得到一个小的.EXE,但也需要分发.bpls。

应用程序使用的RAM内存?然后...

  • 关闭运行时软件包 - 链接器将省略软件包的大部分未使用部分。

应用程序安装程序的大小?然后...

  • 使用运行时包构建关闭
  • 使用Inno设置
  • 以上大部分建议?

安装后应用程序PLUS PACKAGES / DLLS的大小?然后...

  • 使用运行时包构建关闭,并使用UPX

答案 7 :(得分:3)

Project -> Options -> Compiler:
===============================
Optimization ON
Debug Information OFF
Local Symbols OFF
Reference Info OFF
Use debug DCUs OFF

Project -> Options -> Packages:
===============================
Build with runtime packages ON (but you will have to distribute your BPLs!)
Note to non-delphi folks:
a BPL is just a DLL, but with magic Delphi dust to make it easier to use.

This article may be useful to you.

答案 8 :(得分:2)

真的值得这么麻烦吗?我们不再以640 KB的内存时间生活。

如果您希望EXE更小,请使用包和库的动态链接。这提供了大部分的提升。还将所有资源(图像,声音)放入单独的DLL中。您不会通过删除注释并将所有代码写在一条长行中来保存任何内容。

答案 9 :(得分:2)

通常情况下,如果您想要更小的EXE大小,那么请使用早期版本的Delphi。

答案 10 :(得分:1)

我总是使用UPX来压缩exe文件。它工作得很好,经常导致因子2压缩。当然,禁用所有调试信息将有助于减小文件大小。

答案 11 :(得分:0)

使用像the one from Red Gate这样的内存分析器来实时查看运行时内存使用情况。

答案 12 :(得分:0)

UPX和ASPack会因为防病毒误报警而造成很多麻烦。卡巴斯基做了很多!