我的VB6程序目前编译为6MB可执行文件。我想这对今天的机器来说不是一个问题,但我想将它减少到一兆字节以下。
最好的方法是什么?
注意:我已经尝试过“优化小代码”。这实际上将EXE增加到了16MB!
如果解决方案是将一些代码分离到一个单独的DLL中,那么最好的方法是什么?您是否应该将所有表单保留在EXE中并将所有类和模块放在DLL中?我如何知道特别是导致EXE变得如此之大?
答案 0 :(得分:3)
很可能你的代码不是问题,资源是。例如,您可能在某个窗体上的图片框控件中放置了一个大图像。图像保存为未压缩的位图,这正是EXE大小的原因所在。如果这是您的问题,请将图像移出应用程序并移入外部JPG。
另一个例子是,如果您在应用中有一堆报告,并且每个报告在页眉/页脚中都有公司徽标。将徽标集中在其他地方并通过帮助方法访问它。
答案 1 :(得分:0)
如果您正在编写任何新代码,那么您应该为VB.Net写作。
VB.Net优于VB6的许多优点之一(在显而易见的“不再支持VB6”之外)是内置于.Net运行时的大量现成代码(导致一个相应较小的.exe)。
除此之外,可能导致大型.exe的一件事就是使用大量的位图。您可能想看看这是否是罪魁祸首。如果是这样,只需在运行时加载图像,就可以大大减少文件大小。
答案 2 :(得分:0)
对于vb6应用程序来说,6 MB似乎很大。 您可以在应用程序中获得一些声音或图像资源
对于图像...使用Photoshop等一些实用程序来缩小尺寸。 还要在运行时加载图像。这应该给你一个较小的exe
答案 3 :(得分:0)
我必须说,编译到P-Code,它应该在某个地方的Make选项卡高级选项中。它将我的EXE从700 KB减少到200 KB(差异很大)。然后,像其他人建议的那样,减少图像/声音/其他资源。
另外,检查你的图标!一些图标可以达到250KB的PER ICON - 如果你有几个带有几个不同图标的表格,那么这可以加起来。一个典型的现代图标大约是50 KB,但可以更多,因为不同的图标分辨率存储为不同的颜色和显示设置,因此在一个图标.ico文件中,您将有4个图标图像高图形显示,另外4个用于较低图形显示(256位颜色),另外4个用于16位颜色等。您可能最终在一个.ico文件中只有一个表格有16-20个图标图像。您可以在一系列gif图像中删除静态图片等图标图像,它们可以逐帧删除(或者在这种情况下图标图片为图片图片),也可以删除16位和256位颜色选项。
现在,根据我的下一个建议,使用#IF指令删除应用程序中永远不会被任何用户看到的任何调试/报告文本(最终用户不需要的字符串)和/或您用于测试/调试或报告的任何其他功能对最终用户来说都是不必要的......您可以使用#IF指令删除所有这些功能。您可以通过在属性窗口中设置常量布尔值来一次性打开/关闭所有#IF指令(条件编译参数),有关此内容的更多信息可以在我的一篇文章中找到#re#directive指令和文件大小: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制作标签高级/编译部分进行p代码编译,看一下差异。然后执行每个优化,重新编译并记录文件大小差异,并且您将很好地了解每个更改将产生的影响。重复,直到您尝试了所有选项。最大的差异将来自p代码编译和exe压缩。当然,你应该在p-code&之后尝试资源/图标/ #IF指令。压缩选项,因为p-code&压缩是最简单的,最有可能将文件大小降低到原始大小的10%(10倍差异组合)。
最后,让我知道你是如何相处的,我现在很好奇它结果如何。此外,p代码在具有visual basic runtime的所有位置/ PC上运行,因此实际上没有捕获。他们说p代码运行的速度比普通编译代码慢一点,但差别很小,根本不会引起注意。鉴于PC现在如此之快,运行速度差异比VB6刚出现时更难以注意到(更可忽略不计),所以我真的认为它是最终的免费午餐,特别是如果文件大小对您很重要。
让我知道它是怎么回事,或者你有任何其他问题。欢呼声。
答案 4 :(得分:0)
试试这个压缩器:UPX。它是自由而快速的。
答案 5 :(得分:-1)