Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Velicina izvrsnog (exe) fajla.

[es] :: Pascal / Delphi / Kylix :: Velicina izvrsnog (exe) fajla.

[ Pregleda: 5531 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

inherited
Novi Sad

Član broj: 95516
Poruke: 219
212.200.180.*



Profil

icon Velicina izvrsnog (exe) fajla.15.02.2007. u 13:17 - pre 208 meseci
Zanima me, ako neko moze odgovoriti, zasto iskompajlirani .exe fajl, sa samo jednom klasom TForm ima oko 350 KB?
Ako dodamo jos neku klasu, npr. iz JVCL biblioteke, ta velicina se povecava na enormnih 1,5 - 2MB. Zasto?
Time nas program, iako nema ni jednu liniju koda raste na MB, te kad neko pogleda velicinu i ono sto u programu
ima, stekne utisak neprofesionalizma.
 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
85.222.164.*



+1 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 15:01 - pre 208 meseci
zato sto se u tom exe fajlu nalazi sve sto mu je potrebno za rad. za visual basic ti treba instaliran vbrun60.exe ili slicno da bi program radio, a delphi sve sto mu treba (sto nadje u 'uses' valjda) gura u exe. mozes da ukljucis u project->options->packages opciju 'build with runtime packages' pa ce ti "prazan" program biti 16,5 kb a ne 350 kb s tim da uz njega onda moras da stavljas sve potrebne BPL fajlove.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 15:24 - pre 208 meseci
Kao prvo, nemoj mi zameriti, profesionalizam se ne meri tako sto se meri velicina exe-a, vec onim sto taj exe radi. Apsolutno i tacka.

Delphi je RAD (Rapid Application Development) alat, znaci alat koji omogucava brz razvoj aplikacija. Da bi se to omogucilo bilo je potrebno napraviti jedan poseban sloj koji bi omogucio programeru da se ne zamara sa poprilicno komplikovanim direktnim koriscenjem Windows API funkcija za rad sa korisnickim interfejsom. Ovakav pristup je omogucio da u par klikova misem mozes napraviti novu formu u programu, staviti na nju dugme, odraditi reagovanje na dogadjaje, bez potrebe da ulazis u sustinu kako to sve radi, sto sa direktnim koriscenjem Windows API funkcija ne bi bilo ni izbliza tako lako. Moralo se platiti na nekom mestu, kao sto je i velicina exe-a jer se u njega pakuje sve sto je potrebno da bi taj program radio.

Medjutim ni tu stvar nije tako losa kao sto izgleda. Borlandovi inzenjeri su ulozili izuzetan trud kako bi optimizovali velicinu exe-a. Kompajler pazljivo, da ne kazem "pametno" izdvaja iz cele baze izvornog koda VCL-a samo ono sto taj program konkretno koristi. Znaci ne pakuje kompletne unit-e, sve klase i njihove metode, itd., vec ono sto exe-u stvarno treba da bi radio. Inace bi exe bio par desetina megabajta. Da ne ulazim u tehnicke detalje, ali jedan veliki posao je dobro uradjen.

Ti ne mozes naci ni jedan programski jezik gde ce exe biti mnogo manji, a da exe ima iste mogucnosti, i da programer ima toliki prostor za manevar. VCL jeste star, ali je genijalno uradjen, dokaz je i prebacivanje na Linux, sada na .NET itd. Ako neko moze da me demantuje, cekam. Jedna od prednosti moze biti na strani Microsoft-a sto se uz Windows automatski distribuiraju neke biblioteke koje koriste njihove aplikacije pa neiskusnom moze delovati kako taj i taj njihov program (MS-ov) nije velik. Kad ono, neke od pratecih biblioteka su stigle vec uz Windows. Ali to me ne bi ni izbliza nateralo da koristim njihove alate. Za sada.

Ako zaista zelis da ti exe bude sto manji, iz nekog razloga, mozes koristiti direktno Windows API. Saljem primer koji je preuzet sa

http://delphi.about.com/od/windowsshellapi/l/aa111503a.htm

i malo izmenjen kako ne bi bunio pocetnika.

Uz poruku ide zip od 20k u kojem je i exe fajl i source kod (Delphi 2006)!!

Cisto da pokazemo da moze da se dobije mali exe ;)

Prikačeni fajlovi
 
Odgovor na temu

inherited
Novi Sad

Član broj: 95516
Poruke: 219
212.200.180.*



Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 16:52 - pre 208 meseci
Hvala vam na odgovorima.
Sad mi je situacija jasnija.
Ako ima neko jos nesto pametno da doda, da saznamo, neka izvoli.
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 20:13 - pre 208 meseci
Citat:
morlic:Kompajler pazljivo, da ne kazem "pametno" izdvaja iz cele baze izvornog koda VCL-a samo ono sto taj program konkretno koristi. Znaci ne pakuje kompletne unit-e, sve klase i njihove metode, itd., vec ono sto exe-u stvarno treba da bi radio.

Ovo je jedno veoma rasprostranjeno, ali samo delimično tačno verovanje, bar do i uključujući Delphi 7. Za novije verzije ne mogu sa sigurnošću da tvrdim da je ista situacija, ali mogu reći da je sasvim moguće.

Test na D7:

Napravite novu aplikaciju, sačuvajte je i prevedite. Veličina exe fajla je oko 370 kB.

Sada dodajte DBGrid i DataSource komponentu, sačuvajte i prevedite program. Veličina exe fajla je oko 700 kB.

Izbrišite DBGrid i DataSource sa forme, ali ostavite u uses unite koji su dodati (Grid, DBGrid, DB), sačuvajte i prevedite program. Veličina exe fajla je oko 460 kB.

U uses dodajte sledeća dva unita: IBCustomDataSet, IBTable, sačuvajte i prevedite program. Veličina exe fajla je oko 580 kB.

Kako dodajemo unite koji se ne koriste, veličina izvršnog fajla raste. Evidentno je da linker uklanja neke delove koji nisu potrebni, ali ne sve.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 22:18 - pre 208 meseci
> Ovo je jedno veoma rasprostranjeno, ali samo delimično tačno verovanje, bar do i uključujući Delphi 7. Za novije verzije ne mogu sa sigurnošću
> da tvrdim da je ista situacija, ali mogu reći da je sasvim moguće.

Smart linking je apsolutno funkcionalan feature Delphi compilera još od pre deset godina. Itekako funkcioniše. U program se uključuju sve "touched" klase (i one koje oni koriste), u slučaju koji opisuješ verovatno ti uniti imaju initialization/finalization sekciju koje nešto rade. Za više detalja preporučujem tekstove Danny Thorpea.



 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 22:26 - pre 208 meseci
Kolega Obucina je u pravu, ali samo delimicno :)

Mislio sam da necemo ulaziti u tehnicke detalje, ali nemamo izbora. Dakle da krenemo od pocetka.

Uzecemo kao primer promenu kada brisemo TDBGrid i TDataSource.

Njihovim brisanjem sa forme ne dolazi do brisanja unit-a koji su dodati prilikom stavljanja pomenutih komponenti na formu. Zasto je to tako? Zato sto bi bilo vrlo nezgodno da se brise unit koji koristi jos neka komponenta na istoj formi, ili zato sto u kodu zelimo da kreiramo instancu neke klase uz pomoc FindClass() i njenog naziva (koji je string, da podsetim), a nigde drugde u projektu nemamo taj potrebni unit u uses delu kako bi usao u exe.

Da potkrepim primerom. Recimo da u direktorijumu sa projektom imamo jednu formu koja se zove MojaForma i njena klasa je TMojaForma. U pas fajl te forme dodajemo u initialization sekciju sledeci kod:

Code:

initialization
 RegisterClass(TMojaForma); 

end. 


Na ovaj nacin globalno registrujemo klasu te forme.

Ova forma se ne nalazi u uses delu projekta, vec u uses unitu glavne forme. Na toj formi imamo dugme na koje kada kliknemo izvrsava sledeci kod:
Code:

var
  MojaForma: TForm; 
begin
  Application.CreateForm(TFormClass(FindClass('TMojaForma')), MojaForma);
end; 


Kada pokrenete program i kliknete na dugme sve ce raditi zato sto se MojaForma.pas nalazi u uses delu glavne forme i kompajler zbog toga prolazi kroz initialization sekciju fajla MojaForma.pas, i vidi liniju RegisterClass(TMojaForma) i zbog toga ukljucuje i tu formu u finalni exe. Iz glavnog unita mozemo da kreiramo tu formu bez obzira sto ne koristimo eksplicitno TMojaForma za kreiranje kao sto to uobicajeno radimo. Da nam okruzenje automatski odlucuje o tome, exe bi bio cak i kompajliran kada izbacimo MojaForma.pas iz uses dela, ali bi u toku rada program "pukao" jer ne bi nasao klasu koju trazimo. Znaci automatsko brisanje za sada nije opcija. Izmedju ostalog ta automatika sa dodavanjem nije deo kompajlera vec samog IDE okruzenja u kojem radimo.

Dalje, sada kada su ti uniti ostali neobrisani dolazimo u situaciju da kompajler ima unit DBCtrls i DB kao visak. Sta on radi? Initialization sekcija je "zivi" deo koda, znaci automatski ide u exe jer se radi o kodu koji inicijalizuje unit koji koristimo. DBCtrls ima na primer sledeci kod u init sekciji:

Code:

  DB.DBScreen := TVCLScreenApplication.Create as IDBScreen;
  DB.DBApplication := DB.DBScreen as IDBApplication;


Sto se tice kompajlera, nema razlike da li je neki unit borlandov ili se radi o nasem unitu. On kompajlira init sekciju, jer bi pretpostavke tog tipa bile realno neispravne. I naravno ako se u tom delu kreiraju instance neke klase, na primer, te klase ulaze u exe. Da li ih mi koristimo to nema veze, jednostavno init sekcija to znaci. Da li moze da se izbegne? Nekada da, nekada ne. U Borlandovom slucaju u nasem primeru sa DBGrid-om definitivno ne.

Plus, imamo i dodavanje resursa takodje u DBCtrls:

Code:

{$R DBCtrls.res}


plus jos neki resursi, sto se moze videti lepo iz MAP fajla:

Code:

c:\program files\borland\bds\4.0\lib\DBPWDlg.dfm
c:\program files\borland\bds\4.0\lib\DBLogDlg.dfm
c:\program files\borland\bds\4.0\lib\DBCtrls.res


Kompajler takodje ne moze da pogodi da li ce aplikacija ucitavati neke resurse ili ne. Iz jednostavnog razloga sto se i resursi ucitavaju uz pomoc njihovog naziva, koji je naravno obican string i koji moze cak da se definise u nekom ini fajlu koji ide uz program. Cak ni teorijski. Ako neko zeli da objasnim ovo, rado. U nasem slucaju je dodato oko 4KB u exe samo kroz resurse.

Sve je ovo moglo da se izbegne ako bi programer sam obrisao visak unit-a iz projekta. Tu dolazimo i do glavnog krivca za nas problem. Da, programer. Ni najbolje okruzenje na svetu, ni kompajler ne mogu pomoci u ovakvim situacijama. Ista situacija je ako programer postavi recimo quantum grid (koji nije vezan na neki set podataka) na neku formu u programu i zaboravi da je obrise, ukljucujuci i unite. Exe ce biti par MB veci, bez obzira sto niko realno nema koristi od tog grid-a.

Cela poenta je da kompajler radi svoj posao samo sto ima neka realna ogranicenja, koja mu ne dozvoljavaju da "pametuje". Tako da se ne radi o "verovanju", vec je u pitanju sta programer radi i kakvu percepciju rezultata ima na osnovu svog znanja.

Kolega Obucina je po meni, neka ne zameri, generalno u pravu, govoreci ovo na forumu, jer veci deo programerske populacije gleda na ovu stvar na osnovu skromnog ili nikakvog poznavanja internih mehanizama na kojima pociva cela Delphi magija (Ovde ne ubrajam kolegu Obucinu, ako bi neko lose pretpostavio). Lepota Delphi-a je sto im bez obzira na to daje velike mogucnosti u pogledu izrade aplikacija.

Pozdrav svima!


 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Velicina izvrsnog (exe) fajla.15.02.2007. u 22:31 - pre 208 meseci
Citat:
savkic: > Ovo je jedno veoma rasprostranjeno, ali samo delimično tačno verovanje, bar do i uključujući Delphi 7. Za novije verzije ne mogu sa sigurnošću
> da tvrdim da je ista situacija, ali mogu reći da je sasvim moguće.

Smart linking je apsolutno funkcionalan feature Delphi compilera još od pre deset godina. Itekako funkcioniše. U program se uključuju sve "touched" klase (i one koje oni koriste), u slučaju koji opisuješ verovatno ti uniti imaju initialization/finalization sekciju koje nešto rade. Za više detalja preporučujem tekstove Danny Thorpea.


Njegova predivna knjiga " Delphi component design"
 
Odgovor na temu

bondja

Član broj: 10286
Poruke: 167
*.adsl-2.sezampro.yu.



+3 Profil

icon Re: Velicina izvrsnog (exe) fajla.16.02.2007. u 08:01 - pre 208 meseci
Sve pohvale morlic-u za ovaj post! (i ostalima naravno :)

Dve stvari moram da dodam: cemu sve ovo oko velicine exe fajla po ko zna koji put?
(uostalom, imamo toliko razlicitih medija za prenos fajlova (ne mislim na floppy diskete !), a
danas su neki programi (exe) toliko veci u odnosu na Delphi exe fajlove, da nemam komentar,
pa se niko ne zali). Drugo: ako Vam se ne svidja velicina exe fajla, imate izuzetno
mnogo programa za kompresiju istog (npr ako se ne varam UPX ili tako nesto).
Ako morate npr da za svoj exe izvrsite upload preko neta, pa to traje, onda ga razbite: exe + bpl
fajlovi za svaku formu, pa ce sam exe samo da ucitava bpl fajlove, ali opet morate da
saljete (upload/download sta god) same bpl fajlove. Uostalom, kao sto morlic rece:
PROGRAMER je odgovoran, cemu kriviti kompajler, jer Delphi tim je odradio FANTASTICAN
posao (ono sto M$ nikad nece i ne zeli), a kome se nesvidja, neka koristi druge alate ....

poz.


 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

Član broj: 44507
Poruke: 126
*.11.eunet.yu.



Profil

icon Re: Velicina izvrsnog (exe) fajla.17.02.2007. u 14:05 - pre 208 meseci
Mozda nema bas direktno veze sa temom, ali velicinu programa koji je napravio Delphi (u vecini slucajeva) mozes da smanjis programima kao sto je aspack (placa se, ali ima potpuno funkcionalan demo 30 dana).
Sendvic uvek pada na namazanu stranu!
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Velicina izvrsnog (exe) fajla.20.02.2007. u 15:11 - pre 208 meseci
Pozdrav,

skinuo sam ASPack (30 dana licenca), program od 2,8MB kompresovan je na 800KB. Stvarno zadivljujuće.
Da li neko ima iskustva s tim i kako se program ponašao posle kompresovanja u radu?

Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Velicina izvrsnog (exe) fajla.20.02.2007. u 16:33 - pre 208 meseci
Umesto ASPack-a možeš koristiti UPX koji ima nešto manji ratio kompresije (ja mislim) ali je besplatan.

Ja već dugo sve svoje aplikacije pakujem UPXom i ne primećujem nikakve anomalije u radu (doduše moje aplikacije nisu neke aplikacije koje treba da budu nešto ekstra brze/precizne itd... ne zavisi ničiji život od njih )
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

solim73

Član broj: 38553
Poruke: 73
*.123.eunet.yu.



Profil

icon Re: Velicina izvrsnog (exe) fajla.24.03.2007. u 23:14 - pre 207 meseci
Ja recimo koristim NeoLite jos od 98 i nikakvih problema nisam imao.
-Solim
 
Odgovor na temu

Laki123

Član broj: 16706
Poruke: 98
*.smin.sezampro.yu.



+4 Profil

icon Re: Velicina izvrsnog (exe) fajla.29.03.2007. u 21:58 - pre 206 meseci
http://kolmck.net/
Skinuo sam ovo još pre par godina, ali nikad nisam probao.

KOL - Key Objects Library is a set of objects to develop power (but small) 32 bit Windows GUI applications using Delphi but without VCL (or Free Pascal). It is distributed free of charge, with source code.

Brief description:
Delphi2 and higher, Borland Developer Studio, Turbo-Delphi, Kylix and Free Pascal Compiler 1.0.5 and higher are supported now. KOL allows to create very compact Windows32 GUI applications (starting from ~11K without compression - if suggested system units replacement used). The most of code is converted to built-in assembler.
A help generating tool xHelpGen is provided for KOL, which creates detailed documentation in html format. Documentation is generated on base of comments from the source, so developers instantly have access to the most fresh and complete documentation.
A package MCK (Mirror Classes Kit) provided with KOL, and all the advantages of visual programming are available for Delphi developers who use KOL (MCK supports Delphi versions supported from 2 to 7).
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Velicina izvrsnog (exe) fajla.

[ Pregleda: 5531 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.