2013-05-04 56 views
15

Jako test postanowiłem stworzyć prostą aplikację "Hello world" w Delphi przy użyciu Delphi 4, 5, 6, 7, 2005, 2010 i XE3. Ta aplikacja to nic innego jak TForm, TButton ze zdarzeniem OnClick, które wywołuje ShowMessage ("Hello world").Delphi XE3 EXE rozmiar pliku 25 razy większy niż Dephi 7

Poniżej znajdują się wyniki każdego końcowego EXE z debugowania wyłączone:

File sizes of EXEs

Może ktoś wyjaśnić, dlaczego wersja XE3 jest 26 razy większy niż średnio w poprzednich wersjach Delphi?

Oto moje ustawienia projektu dla XE3:

Settings 1

Settings 2

+0

Spójrz na komentarze i odpowiedzi na to pytanie: http://stackoverflow.com/questions/9167938/difference-between-delphi-7 -i-delphi-2010-plik wykonywalny-rozmiar –

+0

Nie można repro. Dla mnie jest to 2230KB. –

+0

@DaleM Może to prawda, ale istnieje OGROMNA różnica między 2 x rozmiar a 25 razy większy. Plus to rok 2010. To jest XE3. –

Odpowiedz

10

Mogłeś zrobić tylko kompilacji po zmianie konfiguracji 'uwolnienia'. Spróbuj wykonać przebudowę (nie rekompiluj). To naprawdę aktywuje konfigurację Release w pliku wykonywalnym i być może mniejszy rozmiar pliku.

Dla mnie (Delphi XE2), wielkość zgłaszane przez system Windows w tej samej aplikacji (konfiguracja Release) to:

1,52 MB (1,600,512 bajtów)

+1

Delphi naprawdę generuje ogromne pliki wykonywalne. Nie wierzę, że przyczyną tego jest RTTI. Kompilator jest nieefektywny na ten sam temat, co w przypadku optymalizacji. Po prostu Embarcadero nie dba o rozmiar pliku wykonywalnego. Jest to jednak duży problem, zwłaszcza w przypadku aplikacji mobilnych, które mają ograniczone zasoby. –

+1

@BasePointer RTTI oznacza, że ​​inteligentny linker nie może usunąć nieużywanych funkcji. Nie ma jednego powodu dla dużych plików wykonywalnych, ale nowy styl RTTI jest prawdopodobnie największym czynnikiem. Na komputerze duży rozmiar pliku wykonywalnego nie ma znaczenia w środowisku wykonawczym. To tylko kwestia pobierania instalatorów. –

0

Cóż .. Istnieje wiele rzeczy, które wyjaśniają różnicę między starą wersją delphi a nową ... ważną rzeczą jest obsługa unicode (D2009 .. DXE4), wszystkie znaki w Unicode przydziel 2 bajty (w D1, D2, D3, D7, ... przydzielają tylko jeden bajt)

+9

Nie, to naprawdę nie jest duży problem. W każdym wydaniu jest zawsze więcej kodu. Ale dużą zmianą jest nowy styl RTTI, który znacznie zwiększa rozmiar jednostek VCL. Ale w tym przypadku jest to proste debugowanie w porównaniu do wydania. –

+3

"Ważna rzecz"? Naprawdę? Ale to tłumaczyłoby zmianę tylko o czynnik nie większy niż 2. –

+0

David: Z mojego doświadczenia wynika, że ​​rozmiar exe podwoił się najbardziej znacząco od 2007-> 2009, prawdopodobnie dlatego, że przepisano RTL z powodu unicode. D2010 ponownie wzrósł z powodu RTTI, ale jeśli go w większości wyłączysz, będzie to mniej niż garb 2007-> 2009. –

5

Wyjaśniałem problem. Chalk to do tego, że używam Delphi 7 99% czasu, kiedy się rozwijam, a XE3 jest dla mnie nowy. Mimo że wybrałem opcję "Wydanie" w ramach opcji projektu i wprowadziłem tam poprawki, okazuje się, że po prostu wybór opcji "Wydanie" nie powoduje przełączenia projektu w tryb Wydania.

This isn't enough

Kto by pomyślał, że miałem też do korzystania z panelu Project Manager i kliknij dwukrotnie na pozycję „Release”, aby umieścić projekt w trybie Release?

Solution

Jeśli ktoś jest ciekawy, ostateczna EXE jest teraz 2229 KB, który jest tylko 5 razy większy od Byli przed Delphi 2010.

+0

Wiesz, że możesz tworzyć tyle konfiguracji, ile chcesz? Załóżmy, że masz 20 różnych konfiguracji kompilacji i pracujesz nad jednym z nich. Kiedy przechodzisz do debugowania tej jednej konfiguracji, czy naprawdę chcesz, aby wszystkie 20 z nich zostały skompilowane? To znaczy, że zajęłoby to 20 razy dłużej. Innymi słowy, tak, musisz to zmienić tutaj. –

+4

Nie, nie wiedziałem o tym. Być może Embarcadero potrzebuje "szybkiego uruchomienia" XXI wieku dla wszystkich tych programistów używających Delphi 7 i poniżej, wyjaśniających, co jest nowe i ważne. :-) – user1527613

+8

Proszę przyjąć @ Steve's answer. A IDE zachowuje się tak, jak można się spodziewać. Jest całkiem rozsądne, że ustawienia różnych opcji konfiguracyjnych można edytować bez zmiany aktywnej konfiguracji. –

0

Wystarczy umieścić te linie w pliku .dpr , zmniejsza eXE wielkości 20%

wykorzystuje Windows

{$ O +} {$ SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}

+1

, ale zrób to tylko dla pliku ** exe **! –

+0

Delphi 10.1 Berlin, '[błąd dcc32] FinalFrontier.dpr (4): E2003 Nieupoważniony identyfikator: 'IMAGE_FILE_RELOCS_STRIPPED'' –