Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Моя прога много весит


Автор: Dreyka 14.7.2004, 12:53
Привет всем. Из темы понятно в чём проблема. Вопрос : Как с ней справиться?

Автор: RA 14.7.2004, 13:09
Такие темы нераз обсуждались воспользуйся поиском

Автор: gemoglobin 14.7.2004, 13:15
большинство (и я в том числе) пишут проги,
подключая стандартные модули и компоненты.
И те и другие тянут за собой еще много всякого барохла, которое может
и не будет у тебя использоваться в программе.
Вот и растет размер.
Я честно говоря на это забил - клиентам это не нужно, а мне тем более.
Есть набор KOL и (что-то еще забыл), которые заменяют стандартные наборы модулей Delphi и позволяют писать проги малых размеров -сокращая до 6-8 раз.

Автор: -=::BlackCat::=- 14.7.2004, 16:25
UPX ishi

Автор: dvamaster 14.7.2004, 16:30
Если любишь голову поломать, можешь перейти на WinAPI.
Работает много быстрее и весит меньше. Проверено временем.

Это не кидать компоненты на форму. Хотя при наличии RES-едитора проблема частично улетучивается.
Но если хочется использовать интерфейс навороченных Delphi-компонентов, то придется сильно поднапрячься.

Советую WinAPI!

Автор: _hunter 14.7.2004, 16:37
+ переходи на WASM -- отличный компилятор

Автор: dvamaster 14.7.2004, 16:52
Пиши машинными кодами... Хотя это уже не здесь обсуждается!

Автор: Vit 14.7.2004, 17:16
Недавно обратил внимание - Photoshop.exe весит больше 15 метров, и заметь я ещё ни разу в жизни не встретил человека который сетует на его размер... Если размер критичен - бери другой язык программирования, например forth или ассемблер...

Автор: Girder 15.7.2004, 09:31
Цитата
... бери другой язык программирования, например forth или ассемблер...
Или Delphi 8 for Net wink.gif .
А вообще лудше использую упаковщик, т.к даже если прога написанна на ассемблере под win, зачистую она все равно памяти много отжирает(не смотря на маленький размер на диске). Но производительность беспорно выше.

P.S. В настоящее время размер уже не так актуален, а вот производительность будет актуальна всегда.

Автор: Петрович 15.7.2004, 10:45
Цитата
А вообще лудше использую упаковщик,

Только лучьше не UPX а например AsPack. У UPX есть неприятная особенность: на больших EXE-шниках, если в статически связанной DLL не находится нужная функция, то прогармма просто не запускается, без всяких сообщений об ошибке!

Автор: RA 15.7.2004, 12:42
Цитата
Цитата
А вообще лудше использую упаковщик,

Только лучьше не UPX а например AsPack. У UPX есть неприятная особенность: на больших EXE-шниках, если в статически связанной DLL не находится нужная функция, то прогармма просто не запускается, без всяких сообщений об ошибке!

Петрович обнови UPX!

PS Aspak -Suxxx

Автор: gemoglobin 15.7.2004, 15:12
Цитата
Цитата
... бери другой язык программирования, например forth или ассемблер...


Или Delphi 8 for Net .


а сколько весят библиотеки для работы програмы + сколько прога весит в памяти!!!

с делфями даже не сравнить

плюс сам D8 в памяти метров 100 занимает !!!

Чем дальше тем проги больше - это конечно не радует

Автор: _hunter 15.7.2004, 16:28
ну и что? при опертивке за гиг и винте за 120г ( средний комп на сегодня smile.gif ) -- это все фигня wink.gif

Автор: Петрович 15.7.2004, 16:54
Цитата
Петрович обнови UPX!

По моему, я пробовал с v1.24w. Ну пожалуй сегодня еще раз попробую - есть у меня учебно-воспитательный проектище. smile.gif

Автор: RA 15.7.2004, 17:16
Цитата
Цитата
Петрович обнови UPX!

По моему, я пробовал с v1.24w. Ну пожалуй сегодня еще раз попробую - есть у меня учебно-воспитательный проектище. smile.gif



1.25 - Last

Но с такими ошибками,как ты описал ниразу не встречался.



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

Автор: maza 15.7.2004, 19:16
А как на счёт 1.91 ?

Автор: RA 15.7.2004, 19:55
Это Бэта. Не рекомедуемая, только для тестов.

Автор: Петрович 16.7.2004, 10:16
Цитата
Немогбы ты мне для эксперимента выслать программульку, с которой такая фигня случается.

Вот, возьми http://asysoev.nm.ru/data/Project1.zip - ~280 кило. Меньше не получилось sad.gif.
Это, как ты просил, пример EXEшника на котором плохо себя ведет UPX (включая v1.90w).
Написан на Delphi, но слегка подправлен WinHex'ом, дабы не напрягать реальной жизнью smile.gif.
Проявляется так: не упакованный файл при запуске ругается на отсутствие в User32.dll некой процедуры, и не запускается. А если его упаковать, то программа не запускается без какой-либо диагностики! Пользователь при этом в недоумении smile.gif.

Автор: Петрович 26.7.2004, 10:07
to RAdmin
Ну, попробовал?

Могу предложить еще, гораздо проще smile.gif

Ниже привожу простеникие проекты dll и Exe который ее использует. Если dll не упакована, то все нормально, если-же упаковать dll, то поведение программы существенно изменяется!

Важно.
Эффект проявляется только если программа (TestDllLoader) скомпилированна без пакетов (Project options / Packages / Runtime packages / Build with runtime packages - выключено), а библиотека (TestDll.dpr) с пакетами (Project options / Packages / Runtime packages / Build with runtime packages - включено).

И еще, у меня все это компилится Delphi6. Причем, не рекомендую все это запускать из под Delphi.

TestDll.dpr :
Код
library TestDll;

uses
 Forms
;

var
 Name :PChar ='Имя';

function GetCCLInfo : pChar;  stdcall;  Export;
begin
 Result := @Name;
end;

exports  GetCCLInfo;


begin
end.


TestDllLoader.dpr :
Код
program TestDllLoader;

uses
  Windows
;

 procedure TestLoadDll(Msg :PChar);
 var
   hDllInstance  :Integer;         // Описатель DLL конвертора
   Buffer: array[0..255] of Char;
 begin
   MessageBox(0, Msg ,'',0);
   hDllInstance := LoadLibrary('TestDll.dll');
   if  hDllInstance <> 0  then begin
     FreeLibrary(hDllInstance);
     MessageBox(0, 'Загрузка Dll была успешна'  ,'',0);
     end
   else begin
     FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ARGUMENT_ARRAY
                     , nil, GetLastError, 0, Buffer, SizeOf(Buffer), nil);
     MessageBox(0, Buffer,'Ошибка загрузки Dll',MB_ICONERROR)
   end;
 end;

begin
 TestLoadDll('Попытка 1');
 TestLoadDll('Попытка 2');
end.

Автор: RA 26.7.2004, 12:02
Так, что касается первого примера, ну не выдаётся мессага об ерроре, ну и фиг с ним. smile.gif
Ну, а еслиб такая функция каторую требует твой exe имелабы место быть то тогда что ?

Что касается второго примера, так там у меня, что в упакованном виде, что не в упакованном виде все одинаково.
Причём паковать я пробовал с разными параметрами.

Автор: Петрович 26.7.2004, 12:56
[quote]Ну, а еслиб такая функция каторую требует твой exe имелабы место быть то тогда что ?[/quote]
Что, что. Программа спокойно начала-бы работать. smile.gif
[quote]Так, что касается первого примера, ну не выдаётся мессага об ерроре, ну и фиг с ним. [/quote]
Ну да, только вот когда такая ситуация возникла у пользователя sad.gif.
Моя программа использует функции из AdvApi32.dll. А он, как оказалось существует в нескольких версиях. Под Win95, в нем нет некоторых функций. Так вот, когда очумевший пользователь звонит в службу поддержки и утверждает что при запуске программы НИЧЕГО НЕ ПРОИСХОДИТ, .... В общем, пока разбирались, потеряли много нервных клеток smile.gif.

[quote]Что касается второго примера, так там у меня, что в упакованном виде, что не в упакованном виде все одинаково.[/quote]
Напомню, у меня это при компиляции D6 и что ОСОБО ВАЖНО:

[quote]Эффект проявляется только если программа (TestDllLoader) скомпилированна без пакетов (Project options / Packages / Runtime packages / Build with runtime packages - выключено), а библиотека (TestDll.dpr) с пакетами (Project options / Packages / Runtime packages / Build with runtime packages - включено).[/quote][/quote]

А http://asysoev.nm.ru/data/TestDllLoader.zip, выложил и исходники, и скомпилированный, но не упакованный вариант (10kb)

Автор: RA 26.7.2004, 14:29
Компилил в D6 но забыл отключить Runtime packages,
Ну вообщем есть косячеллы. smile.gif .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)