【问题标题】:How to reduce size of VB6 compiled executable?如何减小 VB6 编译的可执行文件的大小?
【发布时间】:2019-07-12 21:22:36
【问题描述】:

我的 VB6 程序当前编译为 6MB 的可执行文件。我想这对于今天的机器来说并不是真正的问题,但我想将它减少到 1 兆字节以下。

最好的方法是什么?

注意:我已经尝试过“优化小代码”。这实际上将 EXE 增加到 16MB!

如果解决方案是将一些代码分离到一个单独的 DLL 中,那么最好的方法是什么?你应该把所有的表格都留在EXE中,把所有的类和模块放在一个DLL中吗?我怎么知道是什么导致了 EXE 这么大?

【问题讨论】:

  • 我不会担心大小。将代码拆分为 DLL 是一个好主意,因为它使项目更易于管理。将其拆分为逻辑自包含的块,而不是尝试使每个块具有特定的大小。
  • 你不认为 6MB 对于 EXE 来说太大了吗?
  • 我个人不会担心尺寸。它真的会导致问题吗?如今,6 兆字节并不大,无论您是考虑磁盘空间、下载时间还是其他什么。但您可能希望拆分代码以使其更易于管理。
  • 这并没有引起我所知道的任何问题,但是当我看到 VS 等商业应用程序的 EXE 小于半兆字节时,我确实有点担心。
  • 如果您指的是 Visual Studio,则随附的依赖项为数百兆字节。那何必担心呢?

标签: vb6 compilation exe


【解决方案1】:

很可能你的代码不是问题,资源才是。例如,您可能在某种形式的图片框控件中放置了一个大图像。图像保存为未压缩的位图,这就是影响 EXE 大小的原因。如果这是您的问题,请将图像移出应用程序并放入外部 JPG。

另一个示例是,如果您在应用中有一堆报告,并且每个报告的页眉/页脚中都有公司徽标。将徽标集中在其他地方并通过辅助方法访问它。

【讨论】:

  • 我也会这么说。如果您不确定大小,请检查项目文件夹中 .frx 和 .res 文件的大小。
【解决方案2】:

我必须说,编译为 P-Code,它应该在 Make 选项卡的高级选项中某处。它将我的 EXE 从 700 KB 减少到 200 KB(差别很大)。然后,按照其他人的建议减少图像/声音/其他资源。

另外,请检查您的图标!一些图标的 PER ICON 可以达到 250KB - 如果您有多个带有多个不同图标的表单,那么这可以加起来。一个典型的现代图标大约为 50 KB,但可能更多,因为不同的图标分辨率存储用于不同的颜色和显示设置,因此在一个图标 .ico 文件中,您将有 4 个用于高图形显示的图标图像,另外 4 个对于较低的图形显示(256 位颜色)和另外 4 个用于 16 位颜色等,您最终可能会在一个 .ico 文件中为一种形式提供 16-20 个图标图像。您可以删除一系列 gif 图像中的静态图片等图标图像,它们可以逐帧删除(在这种情况下,也可以逐帧删除图标图片),也可以删除 16 位和 256 位颜色选项。

现在,根据我的下一个建议,使用 #IF 指令删除应用程序中任何用户都不会看到的调试/报告文本(最终用户不需要的字符串)和/或您用于测试/调试或报告最终用户不需要的任何其他功能......您可以使用#IF指令删除所有这些。您可以通过在属性窗口中设置一个常量布尔值来一次性打开/关闭所有#IF 指令(条件编译参数),更多信息可以在我的一篇关于#IF 指令和文件大小的帖子中找到:When I use Conditional Compilation Arguments to Exclude Code, why doesn't VB6 EXE file size change?(还有很多很棒的 StackOverflow 帖子描述了如何使用 #IF THEN #ELSE #END IF 指令进行条件编译,只需搜索即可)。

最后,根据我的最后一个建议,在您仅使用 p 代码编译将文件大小减少 3 到 4 倍之后,您可以使用一个像样的 EXE 压缩器再将文件大小减少 3 到 4 倍!因此,仅使用 p 代码和 exe 压缩,我很确定您可以将 6MB 文件压缩到 600KB 以下(甚至无需进行与#IF 指令、图标文件和其他图像/声音资源相关的任何其他优化)。因为 p 代码编译与压缩无关,所以通过添加 exe 压缩,您可以在不丢失 .exe 扩展名的情况下大幅减少文件大小。通过使用一个好的压缩器,我不是在谈论将其更改为 .zip 文件或 .rar 文件或任何东西。压缩后,它仍然是一个.exe,同时也被压缩,人们可以运行它并正常使用它而不会注意到任何区别,所以,一旦你的exe被执行,它就会在内存中解压并加载到内存中苍蝇,当您关闭应用程序时,没有任何变化(文件大小仍然相同,小且压缩)。 PECompact GUI 版本是一个不错的选择,甚至可能在某些种子大小上可用,+ 就执行此操作的程序而言,有几个免费选项。

总结一下,从你的 VB6 make tabs 高级/编译部分做 p-code 编译,看看有什么不同。然后进行每次优化,重新编译并注意文件大小的差异,您就会很好地了解每次更改的影响。重复,直到您尝试了所有选项。最大的差异将来自 p-code 编译和 exe 压缩。当然,resources/icons/#IF 指令你应该在 p-code 和压缩选项之后尝试,因为 p-code 和压缩是最简单的,并且很可能会将你的文件大小减少到其原始大小的 10%(10 x差异结合)。

最后,让我知道你们相处得如何,我现在很好奇结果如何。此外,p 代码在所有具有 Visual Basic 运行时的位置/PC 上运行,因此真的没有问题。他们说 p-code 代码的运行速度比正常的编译代码慢一点,但差异是如此之小以至于根本不明显。鉴于现在 PC 的速度如此之快,运行速度的差异甚至比 VB6 刚问世时更难以注意到(可以忽略不计),所以我真的认为它是终极的免费午餐,尤其是在文件大小很重要的情况下给你。

如果您有任何其他问题,请告诉我进展情况。干杯。

【讨论】:

    【解决方案3】:

    如果您正在编写任何新代码,那么您真的应该为 VB.Net 编写代码。

    VB.Net 优于 VB6 的众多优势之一(除了明显的“不再支持 VB6”之外)是 .Net 运行时内置的大量即用型代码(这会导致一个相应较小的 .exe)。

    除此之外,可能导致大型 .exe 的一件事是使用大量位图。你可能想看看这是否是罪魁祸首。如果是这样,您可以通过在运行时加载图像来大幅减少文件大小。

    【讨论】:

    • VB6 确实没有继续开发,但微软表示即使 Win8 也将支持 VB6 应用程序。
    • 为了准确起见:不再支持 VB6 IDE,但完全支持 VB6 运行时。有关详细信息和参考,请参阅我们的 VB6 tag wiki。另外,如果exe已经是6兆,那么建议在VB.net从头开始有点晚了
    【解决方案4】:

    6 mb 对于 vb6 应用程序来说似乎很大。 应用中可能有一些声音或图像资源

    对于图像...使用一些实用程序(例如 Photoshop)来减小尺寸。 还在运行时加载图像。这应该会给你一个更小的 exe

    【讨论】:

      【解决方案5】:

      你可以试试这个压缩机。

      http://www.exetools.com/files/compressors/win/petite22.zip

      保护并压缩您的 Vb6 exe 文件。

      【讨论】:

        【解决方案6】:

        试试这个压缩器:UPX。它免费且快速。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          • 2011-04-21
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 2010-09-17
          相关资源
          最近更新 更多