Visual Basic Compile - help please

Pavel Hudecek pavelhudecek
Středa Březen 17 14:22:41 CET 2004


Velkou cast z toho zabira msvbvm60.dll o delce asi 1,6 MB.
V tomto pripade je primarni uvaha takova, ze misto toho, aby 50
programu po nainstalovani zabiralo 20 MB pri prumerne
delce EXE 400 kB, mohou zabirat 4 MB, pri prumerne delce
50 kB a jednom DLL spolecnem, ktere se nachazi v systemovem
adresari.
Co ovsem nechapu je, proc tato DLL nejsou ve vsech verzich
woken uz od jejich instalace, aby je clovek nemusel pribalovat
do instalacek svych softu.
Obdobna uvaha pak plati i pro OCX standardnich komponentu,
ktere ale obsahuji i spoustu nesmyslu navic, jako licencni klice
a ruzna overovani kdovi ceho. Mimochodem winsock a mscomm
nelze pouzit ve VB Lea*rning edition.

Jiank VB je docela dobra vec, jen clovek musi vedet, ze existuji
aplikace, na ktere se hodi lepe, na ktere hure a na ktere vubec.
Kdyz jsem porovnaval rychlost s C++ (Builder i M$), vysla
pri matematickych vecech jako hledani prvocisel, nebo
tzv. dokonalych cisel srovnatelna. U ruznych verzi algoritmu
byl v porovnani s C bud nastejno, nebo max 2x pomalejsi,
coz je naprosto zanedbatelne vzhledem k tomu, ze zde je zasadni
kvalita algoritmu (ruzne verze dokonalych cisel se lisily o desitky
radu jiz u 32 bitu).
Ale po poslednim zdokonaleni algoritmu na dokonala cisla (64 bitu
za nekolik hodin)  jsem narazil na hranici, kdy v C++ slo pouzit
__int64, zatimco VB zadnym vyssim celociselnym typem neopliva...

Na co se VB hodi: Cokoli, co neni nadmerne slozite, *nutne nevyzaduje
ukazatele a nebude nadmerne casto prohledavat dlouhe stringy.
Predevsim se v nem velmi dobre realiziji bezne kancelarske veci, jako sklady
mensi ucetnictvi, ruzne jednoucelove pocitaci programy (treba pro krystaly
registry a rychlost seriaku v MCU, ruzne statistiky a podobne). Da se rici,
ze skoro cokoli, co se da napsat za jeden den az tyden je nejlepsi napsat ve
VB, protoze by to v cemkoli jinem trvalo dele, nebo by byla horsi vysledna
prakticka pouzitelnost.

Poznamka: Tato uvaha prameni i z toho, ze se casto ucastnim jako
porotce soutezi v programovani, ktere porada Stanice Techniku
DDM hl. m. Prahy a programy ve VB jsou obvykle odevzdavany nejdrive
(aby ne, kdyz v nekterych ani neni potreba deklarovat promenne;-)).

(*slovo nutne jsem napsal proto, ze ve VB lze bez potizi udelat 
resizeovatelne pole, jehoz prvky obsahuji dalsi resizeovatelna pole a tak
to lze delat na vice urovni, cemuz se napr. Delphi velmi usilovne branilo.
Takova pole navic muzete jedinym prikazem ulozit cela do souboru
a jedinym prikazem cela nacist, pricemz rychlost temer presne odpovida
prenosove rychlosti HD)

Na co se VB vylozene nehodi: Programy vyzadujici specificke datove
typy, ktere VB neobsahuje (napr. jiz zmineny integer s vice nez 32 bity),
programy nutne vyzadujici ukazatele (napr. kvuli spojovemu seznamu)
a caste operace s prohledavanim a delenim dlouhych stringu (funkce instr, mid,
left, ... atd totiz trvaji s dlouhymi stringy dlouho, protoze se predavaji hodnotou
(naprosto nechapu proc, kdyz implicitni predavani parametru uzivatelskych
funkci je ve VB odkazem)), nebot napr. narocnost programu nahrazujiciho
casto se vyskytujici text ve stringu jinym textem je pak exponencielni
k delce stringu (prechroustani 2 MB pak muze na 1GHz pocitaci trvat nekolik
minut). VB se take nehodi na programy se slozitou stavbou podminek obsahujich
velky pocet AND, OR, MOD, ... protoze veci jako &&, ||, % delaji program
s dvaceti podminkami v jednom IFu zretelne prehlednejsim, diky jejich mensi
delce. Napriklad vyse zminene porovnani VB vs C++ pri pocitani dok. cisel
jsem delal tak, ze jem to nejprve napsall v C, rozchodil a nakonec prenesl
cele s pomoci Ctrl+C a Ctrl+V do VB, kde jsem cervena pismenka zacal
nahrazovat cernym textem:-)))

V cem se ve VB casto chybuje:

Prevod mezi cislem a stringem: 
Funkce Val a Str pracuji s desetinnym cislem s teckou.
Funkce CDbl a CStr pracuji s desetinnym cislem ve fomatu
dle narodniho nastaveni systemu (stejne i defaultni prevody
v ramci typu Variant).

Funkce Dir spatne funguje v rekurzivne volanych funkcich
(to je spis chyba VB, cinici tuto funkci nepouzitelnou
pro rekurzivni prohledavani adresarovych struktur).

Jedna uchylarna na zaver:

C++: true = 1
VB:   true = -1

Pavel Hudecek
----------------------------------------------------
http://www.diametral.cz

Od: "Jan Rehak" <Jan.Rehak@HW.cz>
> Ty jsi zase chytrej...
> 
> Jasne ze nemuzu, protoze rutiny v Delphi a C uz mame, nemeli jsme je
> ve VB, navic jsem si rekl, ze preci jednoduse upravim jeden priklad a
> bude :-)
> 
> Teda ta kompilace je o tom, jak z 50 kB exace udelat instalaci, co ma
> 2-5 MB... At zije GEK (Gatesuv Efektivni Kod...)
> 
> No zkusim to vyhazet co pujde...
> 
> Friday, December 27, 2002, 12:12:27 AM, wrote:
> 
> > Nechces radeji zkusit Delphi ?
> > Jiri Bezstarosti
> > 
> > Od: "Jan Rehak" <Jan.Rehak@HW.cz>
> >> Tak jsem se naivne pustil do prace s Visual Basicem. Predem chci
> >> varovat vsechny co jsou zvykli na syntaxi jazyku jako jsou Pascal, C,
> >> PHP, CGI a podobnych, aby se od tehle hruzne syntaxe jmenem VB drzeli
> > dal...
> >> Jen pochopenim systemu postupnych pretypovavani promenych jsem stravil
> >> strasne moc casu... I kdyz graficke formulare sly hodne rychle od
> >> ruky...
> >>
> >> Napsal jsem jednoduchou aplikaci, ve ktere jsme vychazel z neceho, co
> >> jsem stahnul na Webu. Moje aplikace pouziva Winsocket pro Telnet
> >> spojeni, vse jsem odladil, ale mam problem, ze kdyz vysledny EXAC
> >> funguje u mne na PC, na jinem to zahlasi :
> >>
> >>   Component "MSWINSCK.OCX" or one of its dependencies not correctly
> >>   registered: s file is missing or invalid.
> >>
> >> Jasne ze na tom PC neni MSWINSCK.OCX. Problem je v tom, jak mam do
> >> toho meho Exace tuhle komponentu nejak pridat, aniz bych byl nucen
> >> vytvorit instalaci cca 5 Mb... (coz teda mimochodem take zatim neumim..
> > :-)
> >>
> >>
> >> Omlouvam se, jestli to je nejaka trivialita, ale uz tu do toho par
> >> hodin koukam a v zadne knize co k tomu mam tohle prilis vysvetlene
> >> neni...  DIKY




Další informace o konferenci Hw-list