Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2011, 12:30   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Размер приложения - можно как-то посмотреть что сколько весит?

Добрый день!
Можно ли как-то в Delphi посмотреть какие элементы/формы/компоненты сколько занимают в конечном скомпилированном файле программы? А то после перехода с Delphi 12 на XE (15) размер exe увеличился на 2мб!
delphicoding вне форума Ответить с цитированием
Старый 02.08.2011, 14:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в настройках проекта можно включить создания map файла, в нем все будет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2011, 15:22   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Гуглим по Delphi extended RTTI.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.08.2011, 16:46   #4
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Спасибо, но вес exe файла 20Мб и полная и даже самая краткая карта (MAP) неудобна. Есть ли что-то подобное в килобайтах с сортировкой по занимаемому весу?
delphicoding вне форума Ответить с цитированием
Старый 29.08.2011, 11:40   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Так есть более простые и удобные средства по этому вопросу?
delphicoding вне форума Ответить с цитированием
Старый 29.08.2011, 12:11   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Не те времена, чтобы сильно экономить. Если без оптимизации обойтись, то можно просто сжать http://upx.sourceforge.net/#downloadupx
eoln вне форума Ответить с цитированием
Старый 29.08.2011, 12:20   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

delphicoding, все зависит от того, что вы используете в своём проекте.
1. нужно выврезать из uses в каждом модуле то, что там не используется.
2. В опциях пакета выкинуть из run-time пакетов то, что не используется.
3. в опциях проекта отключить все те bpl пакеты которые опять же не используешь в проете.
4. Далее открываем exe каким-нибудь Restorator'ом и удаляем все что не юзает exe(Ну тут методом проб и ошибок, интуиция вам подскажет) т.к. удалишь не тот ресурс и эзеры с вас 7 шкур спустят..
5. Сжатие exe при помощи upx(Опять же играйте с настройками сжатия(Ультра-брута и вырезания таблиц релокаций вполне достаточно)).

Ну а далее только с кодом баловаться... лень писать.
Человек_Борща вне форума Ответить с цитированием
Старый 30.08.2011, 18:46   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Так есть более простые и удобные средства по этому вопросу?
Напиши - будет.

Раз до сих пор нет - никому особо это не надо. Иначе давно бы написали.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.08.2011, 17:53   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

3 часа моего времени - и готово. См. аттач.

Запускаем, тыркаем в .exe, ставим уровень детализации информации и любуемся статистикой.

Это программа - часть EurekaLog 7 Tools Pack.

Примечание: три последний уровня детализации (до модулей, классов и подпрограмм) требуют наличие отладочной информации EurekaLog для программы. Просто мне было проще считывать статистику по готовой инфе, чем парсить .map файл.

Отладочную информацию EurekaLog можно получить двумя способами:
- скомпилировать программу с EurekaLog (Trial версия EurekaLog вполне подойдёт).
или
- скомпилировать программу с созданием .map файла и обработать её ecc32 (взять, опять же, можно из Trial-а EurekaLog; как юзать - см. справку).

Пример вывода:
Код:
Analyzing file "C:\EL 7\Packages\Delphi14\ecc32.exe":

Target:                  x86-32

Module's version:        7.0.0.86
File size:               2335232
Module's description:    EurekaLog command-line compiler for Delphi and C++ Builder 2010
Compilation date:        2011.08.31 16:55:12

Is Borland image:        True
Is EurekaLog image:      True
Is JclDebug image:       False
Is MadExcept image:      False
Is TD32 image:           False

Has .eldbg file:         False
Has .jdbg file:          False
Has .mad file:           False
Has .map file:           False
Has .tds file:           False
Has .dbg file:           False
Has .pdb file:           False

EurekaLog code version:  7.0.0.81 alpha 1 RC
EurekaLog data version:  7.0.00
EurekaLog's data size:   215706
  in % of original size: 10.18%

Module type:             exe

Sections:
  1928704 bytes (82%)    .text (CODE, EXECUTE, READ)
  357376 bytes (15%)     .rsrc (INIT DATA, READ)
  26624 bytes (1%)       .data (INIT DATA, READ, WRITE)
  12800 bytes (0%)       .idata (INIT DATA, READ, WRITE)
  8192 bytes (0%)        .itext (CODE, EXECUTE, READ)
  512 bytes (0%)         .rdata (INIT DATA, READ)
  0 bytes (0%)           .bss (READ, WRITE)
  0 bytes (0%)           .reloc (READ, WRITE)
  0 bytes (0%)           .tls (READ, WRITE)

Resources:
  215706 bytes (9%)      RCDATA ELDATA
  33512 bytes (1%)       RCDATA CHARTABLE
  9640 bytes (0%)        ICON #5
  5448 bytes (0%)        STRING #4040
  4264 bytes (0%)        ICON #6
  4264 bytes (0%)        ICON #9
  3752 bytes (0%)        ICON #1
  2440 bytes (0%)        ICON #7
  2280 bytes (0%)        RCDATA PACKAGEINFO
  2248 bytes (0%)        STRING #4059
  2216 bytes (0%)        ICON #2
  2088 bytes (0%)        BITMAP EL_SEND
  2056 bytes (0%)        STRING #4062
  1916 bytes (0%)        STRING #4044
 ... вырезано ...

Units:
  120571 bytes (5%)      EClasses (EClasses.pas)
  107412 bytes (4%)      Classes (Classes.pas)
  95613 bytes (4%)       XMLSchema (XMLSchema.pas)
  62379 bytes (2%)       SysUtils (SysUtils.pas)
  55472 bytes (2%)       OPToSOAPDomConv (OPToSOAPDomConv.pas)
  50340 bytes (2%)       EBaseModule (EBaseModule.pas)
  50334 bytes (2%)       InvokeRegistry (InvokeRegistry.pas)
  48037 bytes (2%)       EDisAsm (EDisAsm.pas)
  47628 bytes (2%)       Graphics (Graphics.pas)
  47513 bytes (2%)       EStrConsts (EStrConsts.pas)
  45777 bytes (1%)       System (System.pas)
  45492 bytes (1%)       Variants (Variants.pas)
  42290 bytes (1%)       WSDLBind (WSDLBind.pas)
  42138 bytes (1%)       XMLDoc (XMLDoc.pas)
  41481 bytes (1%)       WSDLItems (WSDLItems.pas)

... вырезано ...

Classes:
  70904 bytes (3%)       EClasses.TEurekaModuleOptions
  31580 bytes (1%)       OPToSOAPDomConv.TSOAPDomConv
  18344 bytes (0%)       EDialog.TBaseDialog
  17500 bytes (0%)       ELogManager.TLogFile
  17268 bytes (0%)       WSDLItems.TWSDLItems

... вырезано ...

Routines:
  41872 bytes (1%)       EStrConsts.InitGlobalConsts
  38560 bytes (1%)       EDisAsm.TDisAsm
  24520 bytes (1%)       ecc32.Finalization
  18424 bytes (0%)       EClasses.TEurekaModuleOptions
  13380 bytes (0%)       EBorDebugClass.EBorDebugSectionError
  11932 bytes (0%)       ECmdLine.InternalExecute
  10388 bytes (0%)       EWebTools.FindWinINetErrorMessage
  8888 bytes (0%)        EMantisConnect.ProjectAttachmentData
  7904 bytes (0%)        EBorDebug.Init
  6504 bytes (0%)        WSDLItems.TWSDLItems
... вырезано ...
Вложения
Тип файла: zip ModuleInformer.zip (659.1 Кб, 23 просмотров)
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.08.2011, 18:47   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

а чем tdump не устроил?

> 24520 bytes (1%) ecc32.Finalization

ого, нехилая такая финализация )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пользователь запретил приглашать себя в приложения", сколько не парился никак не могу убрать. Как убрать? nigretos Свободное общение 3 10.06.2011 15:48
Как можно посмотреть DLL cargo29 Общие вопросы Delphi 5 14.04.2011 14:04
сколько весит байтов? Saken_ Общие вопросы Delphi 3 18.10.2010 23:40
Как выставить размер окна консольного ДОС приложения? tolikrog Помощь студентам 5 27.01.2010 13:22
сколько весит сайт RAVAL)) О форуме и сайтах клуба 10 16.06.2009 00:28