Как добиться меньшего размера исполняемого файла?

== тесты для ссылочного равенства (независимо от того, являются ли они одним и тем же объектом).

.equals() тесты для равенства значений (независимо от того, являются ли они логически «равными»).

Objects.equals () проверяет наличие null перед вызовом .equals(), поэтому вам не нужно (доступно с JDK7, также доступным в Guava ).

String.contentEquals () сравнивает содержимое String с содержимым любого CharSequence (доступно с Java 1.5).

Следовательно, если вы хотите проверить, имеет ли две строки одно и то же значение, вы, вероятно, захотите использовать Objects.equals().

// These two have the same value
new String("test").equals("test") // --> true 

// ... but they are not the same object
new String("test") == "test" // --> false 

// ... neither are these
new String("test") == new String("test") // --> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 

// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true

// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true

Вы почти всегда хотите использовать Objects.equals(). В редкой ситуации, когда вы знаете, что имеете дело с интернированными строками, вы можете использовать ==.

Из JLS 3.10. 5. Строковые литералы :

Кроме того, строковый литерал всегда ссылается на тот же экземпляр класса String. Это связано с тем, что строковые литералы, или, в более общем смысле, строки, которые являются значениями константных выражений ( §15.28 ), «интернированы», чтобы обмениваться уникальными экземплярами, используя метод String.intern.

blockquote>

. Подобные примеры также можно найти в JLS 3.10.5-1 .

13
задан Peter Perháč 27 January 2010 в 20:31
поделиться

7 ответов

  1. Вы сделали отладку или выпустить сборку? (Сделайте его выпуску для меньшего размера, убедитесь, что оптимизация включена, информация отладки выключена)

  2. Вы выключили RTII (Delphi 2010 и UP), если не нужно? (Меньшее размеры EXE.)

  3. Количество единиц в вашем использовании пункт вашего основного устройства, не является хорошим способом угадать размер EXE. Подумайте об этом таким образом: сам VCL - это одно большое количество кода, слой базы данных другой, а материал, которые вы пишете, вероятно, очень небольшой процент от размера EXE.

  4. Чтобы понять ваш исполняемый размер, попробуйте анализатор проекта JCL или прочитайте файл карты, который производится при включении опции карты. Это скажет вам именно то, что находится внутри вашего исполняемого файла.

Это было бы глупо по разным причинам, но вы могли бы получить меньший исполняемый с помощью Delphi 7, например. В конце, когда я делаю приложение, и я хочу сделать его меньше, я смотрю на то, сколько времени это займет, и сколько усилий все усилию, чтобы восстановить все (например, с альтернативой VCL) Это.

17
ответ дан 1 December 2019 в 17:39
поделиться

Насколько большой ваш DFM? Он включен в качестве ресурса в вашем EXE. В зависимости от того, насколько сложна ваш графический интерфейс, вы можете обнаружить, что создание GUI во время выполнения в коде может уменьшить размер EXE.

6
ответ дан 1 December 2019 в 17:39
поделиться

У вас есть какие-либо файлы ресурсов или изображения, связанные с проектом?

Я думаю, что ADODB также включает в себя довольно какой-то накладные расходы. Если ваше приложение действительно использует базу данных, то простое 1 МБ не так уж плохо для размера файла? Не забывайте, что ваше приложение просто это exe - нет необходимости в дополнительных DLL и т. Д.

0
ответ дан 1 December 2019 в 17:39
поделиться
  • Вы можете попробовать использовать KOL (библиотека ключевых объектов - это набор объектов для разработки мощности (но маленьких ) 32-битных приложений Windows GUI с использованием Delphi Но без VCL). KOL позволяет создавать очень компактные приложения Windows32 GUI (начиная с ~ 11k без сжатия - если предложено используемая замена системных устройств). Большая часть кода преобразуется в встроенный ассемблер.

  • Другой вариант использует компрессор EXE, как UPX .

13
ответ дан 1 December 2019 в 17:39
поделиться

MapFilestats (delphitools.info) - хороший (бесплатный) инструмент, который позволяет вам увидеть, сколько места каждый блок занимает ваш исполняемый файл. Мой собственный инструмент Дельфиъюницизирует - это альтернатива, что в дополнение к размерам устройства также отображается размер каждой функции или класса.

Delphi 2010 сделал исполняемый файл по умолчанию примерно на 30% больше, вероятно, из-за RTTI, включенных в блоки RTL / VCL, поэтому вы можете использовать более старую версию Delphi для более мелкого EXE.

Как упомянул другие UPX , является отличным инструментом, ложные срабатывания вируспинцами не так часто бывают в моем опыте.

Размер Delphi-исполнителей может быть очень обрезан с использованием пользовательских системных единиц и UPX-сжатия. Я могу генерировать exe-файлы, которые меньше, чем 64 КБ по размеру с моим Game-генератором на основе Delphi ZGameeditor , даже с Delphi Berlin.

8
ответ дан 1 December 2019 в 17:39
поделиться

Да, но тогда вам нужно будет поставлять Другие единицы кода как дополнительные файлы. Так же, как .NET требовала сборки, и у вас есть VB runtimes и т. Д., Это просто время выполнения Delphi - но он встроен в EXE.

Другой вариант - сжать исполняемый файл, есть инструменты для этого вокруг.

2
ответ дан 1 December 2019 в 17:39
поделиться
  • Вы говорите, что возвращаетесь к Delphi. Если у вас все еще есть старая версия, используйте это - каждая новая версия добавляет дополнительные функции, и если вам они не нуждаются в них, ваши бывшие будут меньшими без них.

  • Убедитесь, что вы только в том числе единицы, которые вы на самом деле используете.

Но все, что вы делаете, я очень сомневаюсь, что вы получите до 300к. Если память служит, даже «Hello World» приложение в Delphi 2 будет больше, чем это.

1
ответ дан 1 December 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: