Форум: "Потрепаться";
Текущий архив: 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.004 c