5

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

4

13 回答 13

10

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

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

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

于 2009-01-06T10:55:17.060 回答
9

我不会花任何时间删除注释,编译器无论如何都会将它们删除

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

于 2009-01-06T10:42:07.743 回答
8

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

于 2009-01-06T10:56:05.343 回答
7

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

留下搬迁信息!

在 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

干杯!

于 2009-01-06T16:24:55.647 回答
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;

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

于 2009-01-06T11:05:25.027 回答
4

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

这是激进且非常大的变化,但会减小 exe 的大小。

于 2009-01-06T11:53:41.390 回答
4

先测量,再优化。您的应用程序有多大,您希望它有多大?

你是不是担心...

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

  • . _ 您将获得一个很小的 ​​.EXE,但还需要分发 .bpls。

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

  • 在关闭运行时包的情况下构建 - 链接器将忽略包中大部分未使用的部分。

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

  • 在关闭运行时包的情况下构建
  • 使用 Inno 设置
  • 上面的大部分建议?

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

  • 在关闭运行时包的情况下构建,并使用 UPX
于 2009-01-06T16:37:55.433 回答
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.

这篇文章可能对你有用。

于 2009-01-06T16:49:30.497 回答
2

这一切的麻烦真的值得吗?我们不再生活在 640 KB 内存时代。

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

于 2009-01-06T10:54:31.460 回答
2

通常来说,如果您想要更小的 EXE 大小,请使用早期版本的 Delphi。

于 2009-01-06T12:04:17.420 回答
1

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

于 2009-01-06T12:27:09.933 回答
0

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

于 2009-01-06T10:39:25.487 回答
0

UPX 和 ASPack 会因为防病毒误报而制造很多麻烦。卡巴斯基经常这样做!

于 2010-09-26T18:38:24.637 回答