Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];

Вниз

Безумные размеры EXE-шников   Найти похожие ветки 

 
Андрей Сенченко   (2001-12-25 16:20) [0]

Сколлько раз натыкался на обсуждение этой темы и вот уже сам задумался : ну почему, с какого такого перепугу вот эта программка может весит почти полмега ?


PROGRAM bmptojpg;

USES
Windows, Classes, Graphics, Forms, JPEG;

VAR
JPGpic: TJPEGImage;
BMPpic: TBitmap;
BMPName, JPGName : string;

BEGIN
Application.Initialize;
Application.Run;
If ParamCount > 1
Then
Begin
BMPName := ParamStr(1);
JPGName := ParamStr(2);
JPGpic := TJPEGImage.Create;
BMPpic := TBitmap.Create;
Try
BMPpic.LoadFromFile(BMPName);
JPGpic.Assign(BMPpic);
JPGpic.SaveToFile(JPGName);
Finally
JPGpic.Free;
BMPpic.Free;
End { Try }
End { Then }
Else
MessageBox(0,PChar("Эту программу необходимо запускать"+#13+"с параметрами:"+#13+"Имя файла.bmp Имя файла.jpg"),PChar("Внимание !"),MB_OK+MB_ICONSTOP);
Application.Terminate
end.


 
Digitman   (2001-12-25 16:29) [1]

А ты измерь-ка, уважаемый, "вес" DCU следующих подключенных модулей : Classes, Graphics, Forms, JPEG. Никакие мысли у тебя по этому поводу не возникли ?


 
Андрей Сенченко   (2001-12-25 16:38) [2]

Возникли. Давно. Но как-то не предполагал, что компилятор подключает их ... как бы это ... по умолчанию целиком и полностью.
Это от слабого знакомства с понятием "класс". Имеется в виду, что условно говоря можно вырезать из FORMS только нужный мне
TApplication = class(TComponent)
с нужными мне методами и свойствами и все будет значительно легче ? ( в плане понятное "увесистости" итогового EXE )


 
Сенченко Андрей   (2001-12-25 17:09) [3]

Ну хорошо. Вес windows.dcu - 627`868. Ну думаю .... щас то я красавицей и стану. Отключаю различного рода FullDefence типа
messagebox(,,,)
Отключаю из USES ставший ненужным Windows. Компилирую, с замиранием сердца смотрю на размер и .... не вижу никаких изменений.
Обидно. Дела в том, что незабвенным AsPack-ом программа ужимается очень хорошо и возникают сомнения: так можно ли изменяя только исходник добиться малых размеров итоговой программы.


 
Андрей Сенченко   (2001-12-25 17:10) [4]

Кстати ... К вопросу о НИК-ах.

Варианта ( "Фамилия - Имя" ) я однозначно не регистрировал. Зловещих провалов в памяти пока нет


 
Андрей Сенченко   (2001-12-25 17:16) [5]

Можно ... Вот так:


PROGRAM bmptojpg;

USES
Graphics, JPEG;

VAR
JPGpic: TJPEGImage;
BMPpic: TBitmap;
BMPName, JPGName : string;

BEGIN
If ParamCount = 2
Then
Begin
BMPName := ParamStr(1);
JPGName := ParamStr(2);
JPGpic := TJPEGImage.Create;
BMPpic := TBitmap.Create;
Try
BMPpic.LoadFromFile(BMPName);
JPGpic.Assign(BMPpic);
JPGpic.SaveToFile(JPGName);
Finally
JPGpic.Free;
BMPpic.Free;
End { Try }
End { Then }
end.


Почти вдвое !
Спасибо всем ответившим !!!


 
Digitman   (2001-12-25 17:39) [6]

модуль Forms значительно влияет на "вес".
модуль Windows практически не влияет на "вес".
И - по вполне объяснимым причинам. В которых ты, по видимому, так и не разобрался


 
Андрей Сенченко   (2001-12-25 17:42) [7]

> Digitman.
Пока нет. Листинг исходников того и другого надо читать. Но суть видимо в "общей массе" объявляемых процедур и переменных.
Если я не прав - хотелось бы услышать ... Кстати многим начинающим этот ответ ( на мой взгляд ) был бы полезен.

Спасибо.


 
Digitman   (2001-12-25 17:47) [8]

Суть - в массе реализуемых (а не декларируемых) в данном модуле процедур. На объем объектного код влияет именно реализация, а не декларация.


 
Иван Шихалев   (2001-12-25 17:54) [9]

Более того - на процедуру должна ипользоваться хоть какая-то ссылка. Например, использование компонента со свойством Font :TFont включает всю реализацию TFont, его предков и связанных с ними классов...


 
Андрей Сенченко   (2001-12-25 17:56) [10]

Тогда совсем непонятно. Имеется в виду что, вполне серьезные люди сидят и пишут глобальные исходники типа Forms, Windows, Classes ... и оставляют в описанных там классах объявленные но не реализованные процедуры ?
Если я хоть что-либо понимаю в программировании, то тогда не понимаю смысла слова реализованные. Хоть строка то кода в них должна быть ... и хоть кто-то на них должен ссылаться ?
Или часть процедур объявляется только для наследования и перекрытия в потомках ?


 
Андрей Сенченко   (2001-12-25 18:01) [11]

> Иван Шихалев ©
Если следовать этой логике, объявляя ЛЮБОЙ класс или используя ЛЮБОЙ компонент я по умолчанию втягиваю в свой EXE-шник ВСЕ его предки до TObject со всеми не используемыми сойствами, методами и прочим ?
Соответственно в борьбе за малый EXE-шник (условно говоря) нужно перебить всех предков, а точнее не используемые мной методы и классы


 
Delirium   (2001-12-25 19:06) [12]

> Андрей Сенченко
Советую нажать Shift+Ctrl+F11 и посмотреть сколько "лишних" Packages подключается к EXE-шнику, если львиную долю этого отключить размер EXE-шника будет исчисляться максимум десятками килобайт. Я доводил размер консольной проги до 9kb. (Delphi 6)


 
Delirium   (2001-12-25 19:30) [13]

Почти то-же код весит 90kb, из packages только: vcl;rtl;vclx

program Bmp2Jpeg;

{$APPTYPE CONSOLE}

uses Windows, Graphics, JPEG;

VAR
JPGpic: TJPEGImage;
BMPpic: TBitmap;
BMPName, JPGName : string;

BEGIN
If ParamCount > 1
Then
Begin
BMPName := ParamStr(1);
JPGName := ParamStr(2);
JPGpic := TJPEGImage.Create;
BMPpic := TBitmap.Create;
Try
BMPpic.LoadFromFile(BMPName);
JPGpic.Assign(BMPpic);
JPGpic.SaveToFile(JPGName);
Finally
JPGpic.Free;
BMPpic.Free;
End { Try }
End { Then }
Else MessageBox(0,PChar("This program it is necessary to start"+#13+"with parameters:"+#13+"Filename.bmp Filename.jpg"),PChar("Attention !"),MB_OK+MB_ICONSTOP);
end.


 
Иван Шихалев   (2001-12-25 20:03) [14]

> Если следовать этой логике, объявляя
> ЛЮБОЙ класс или используя ЛЮБОЙ компонент
> я по умолчанию втягиваю в свой EXE-шник
> ВСЕ его предки до TObject со всеми
> не используемыми сойствами, методами и прочим ?


Если верить документации, то со всеми виртуальными и теми, на которые эти виртуальные ссылаются. Можно считать, что со всеми.


 
Андрей Сенченко   (2001-12-25 20:29) [15]

> Delirium ©

OK. Именно так. Только приложение по идее не должно быть консольным ( да и вообще хоть как-то видимым, т.к. в этом нет потребности ), поэтому в итоговом годе убрал
{$APPTYPE CONSOLE}

> Иван Шихалев ©
Гмы. А судьи кто ? ( как говаривал классик ). То есть разработчику самому предоставлено право судить : убивать все подряд не щадя своего времени ( которого уйдет немало ) или получать немерянные по размеру файлы ?

> all
А можно поинтересоваться у читающих эту ветку : Кто-нибудь делает столь героические свершения в борьбе за место на винте заказчика ?


 
Delirium   (2001-12-25 21:31) [16]

Лично я занимаюсь таким геммором только когда пишу dll-ки, цель: быстрая загрузка, а так, размер EXE-шника у заказчика наоборот вызывает уважение, народ-то тёмный :)


 
Иван Шихалев   (2001-12-26 17:24) [17]

> То есть разработчику самому предоставлено право судить:
> убивать все подряд не щадя своего времени (которого
> уйдет немало) или получать немерянные по размеру файлы?


Примерно так. Или ты используешь навороченную библиотеку и все преимущества RAD, или пишешь маленькие программы. К тому же, это 300К можно таким макаром сократить до 30и, а пару мегов так уже не исправишь - то есть для больших проектов размер "довеска" VCL значения уже не имеет.



 
False_Delirium   (2001-12-26 19:40) [18]

Такию юниты, как Messages, Windows. Не влюяют на размер ЕХЕшника, в отличие от тго же Classes или даже Messages(Который велик из за объявленых внутри модулей, в частности Classes) потому, что там описаны, в большенстве своём, константы.

Всё это можно реализовать на API, используя в качестве пособия исходные тексты Borland`a. Если Вы уверены в своих силах, то так и стоит поступать, и работать будет бытрее(написав свои Class`ы минуя частные ситуации и обработку условий использованья, описанные в стандартных). Чем дальше, тем ниже мы опускаемся по классификации языков...:)..и приходим к Assembler`у..:)..здесь-то будет минимальный размер и максимальная производительность, плюс уйма затраченного времени...:)
...IMHO...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
14-42845
Hawk2
2001-12-25 18:04
2002.02.14
---|Ветка была без названия|---


3-42644
Hawk2
2002-01-16 17:14
2002.02.14
Преобразование типов.


14-42832
Polevi
2001-12-24 15:45
2002.02.14
LOL


3-42657
DeNNiss
2002-01-17 08:08
2002.02.14
Помогите пожалуйста!


1-42712
Quaker
2002-02-01 06:53
2002.02.14
Переделать TActionList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский