Newsgroup: it.comp.lang.visual-basic
Titolo: Eseguibili immensi

Ciao, vorrei qualche consiglio da voi su come rendere più modulare i
programmi in VB.
Il mio problema è che dalla compilazione ottengo un eseguibile abbastanza
grandicello 3 mb.
L' applicazione utilizza forms MDI.
A me piacerebbe tanto suddividere in qualche modo le varie parti
dell'applicazione in tanti files. Ognuno di questi files dovrebbe contenere
le forms e i moduli per la gestione di una procedura specifica. Ad esempio:
gestione anagrafiche, gestione statistiche, gestione documenti, ecc. ecc.
In questo modo se effettuo un'aggiornamento ad uno di quei moduli non devo
ricompilare tutto ma solo il modulo che è stato oggetto di modifica.
Come si potrebbe fare?
Luciano

 wrote in message
news:tw09a.175769$YG2.5...@twister1.libero.it...

alcuni programmatori optano per dividere gestionali, etc... in più file
distinti, e utilizzano poi un menù per richiamare questi exe. In poche
parole fanno progetti separati per ogni sezione dell'applicativo utilizzando
comunque gli stessi moduli di base.
Se però fai una modifica ad un modulo di base ovviamente devi poi
ricompilarti tutti gli EXE e ridistribuirli tutti.
Personalmente ormai tengo tutto in un EXE, al massimo faccio delle DLL, è
una questione di gusto personale ormai secondo me, perchè non siamo più agli
inizi degli anni 90 dove gli exe dovevano essere piccoli per motivi tecnici,
ora nessuno si stupisce più se c'è da scaricare un file da 3 MB, certo è che
più painless è l'aggiornamento meglio è per tutti.
Intanto una cosa che farei per diminuire la dimensione dell'eseguibile e
lasciare tutte le immagini, etc.. esterne all'exe, magari includile in una
DLL se non vuoi che altri possano appropriarsene, in questo modo si riduce
gia notevolmente la dimensione, altra soluzione e fara tante DLL che
lavorano col core del programma ma questo probabilmente ti farebbe anche
rivedere la struttura del programma.
Io te le ho buttate un po' li :)
--
Fabio Angela (aka Red Angel) ICQ: 95966807)
http://www.redangel.it
 : Share Your Knowledge
Il Sito Dei Programmatori

 grandicello 3 mb.
Ahah :) immensi!
Noi abbiamo un exe da 40Mb, più vaire DLL activeX.
Ora stiamo impazzenda per spezzarlo in più parti perchè di fondo non c'è
stata una progettazione lungimirante.
Inoltre si è optato per mantenere la struttura MDI, e quindi non ti dico i
salti mortali e rimbalzi tra OCX e activeX vari per riuscire a mantenerla
(non si possono avere form MDI-child in oggetti ActiveX).
Quindi per ora il consiglio è pensaci bene prima di prendere una strada, e
considera tutte le possibilità.
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

grandicello 3 mb.
Io uso con notevole soddisfazione un compressore freeware, il mio exe
da oltre 2MB diventa circa 270 KB. Lo uso da oltre un mese e non mi ha
dato nessun problema. Prima di impazzire con moduli etc etc provalo.
L'indirizzo e'
http://upx.sourceforge.net
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it

 Io uso con notevole soddisfazione un compressore freeware
Non so come funziona UPX, ma in genere i compressori
hanno un enorme svantaggio: sono piccoli su disco, ma poi
vengono interamente decompressi in memoria, quindi la
memoria occupata è molto superiore.
Ciao
Andrea


wrote:

Poiche' mi hai messo una pulce (grossa) nell'orecchio ho fatto una
verifica al volo. Ecco i risultati:
exe originale
dimensione 2092 Kb
spazio allocato 4008 Kb + 1428 Kb
exe compattato 276 Kb
spazio allocato 6040 Kb + 3524 Kb
(Colonne Utilizzo memoria e Dimensione memoria virtuale del Task
Manager su Windows XP).
Non mi ero posto il problema avendo nella macchina target molta
memoria, ma e' giusto poter quantificare questo "prezzo" nell'uso del
compattatore.
In realta' su macchine molto datate l'utilizzo del compressore puo'
anche causare un rallentamento al lancio dell'exe (proprio per la fase
di scompattamento), ma da un PII in poi dovrebbe essere trasparente.
Ciao


 wrote in message
news:b429j5$1qfcfo$1...@ID-170738.news.dfncis.de...

In linea teorica non sono d'accordo, il risultato secondo me è sempre lo
stesso,
che un exe sia 3 MB su disco o in memoria non cambia nulla
perchè l'OS prima e il VB dopo non fanno un caricamento selettivo.
Il chaching viene in ogi caso fatto solo dopo il caricamento, infatti le
parti non usate sono spostate da RAM a virtuale
L'unica differenza si ha se ci sono delle risorse in un file di res embedded
che vengono richiamate dinamicamente
tipo immagini o file sonori.
Solo in qest'ultimo caso  non vengono caricati in memoria prima che tu
esplicitamente li richiami da codice.
ma già se l'immagine è embedded come sfondo di una form il risultato è lo
stesso (quando la form è caricata).
visto che nel codice che carica la form viene decompressa in memoria e
renderizzata l'immagine.
Quando l'os carica un eseguibile fa più o meno cosi.
Prepara una zona di memoria (PSP) con i dati relativi al proggo (Program
Segment Prefix) questa zona contiene anche la stringa con la riga di comando
e parametri.
Setta lo stack e alloca memoria per codice e dati in base alle variabili
DIMENSionate all'interno dell'exe
Guarda le tabelle di relocazione per sapere come indirizzare il codice che
supera i limiti di segmento (i vecchi 64k)
....
Carica il codice e la zona dati in memoria e fa un JMP alla prima istruzione
del nuovo codice.
da li parte il tutto.
Se l'exe è compresso tutto funzia in maniera analoga tranne che all'inizio
del nostro codice viene
messo un loader che carica i byte compressi del nostro codice , li
decomprime e fa un jump alla prima istruzione del
codice decompresso.
Result :
Identico a meno delle obiezioni su citate (file RES).
Quello che cambia è la velocità di esecuzione visto che all'inizio il loader
deve decomprimere il file
Che ne dite ?
ciao
Lorenzo

 spazio allocato 6040 Kb + 3524 Kb
La differenza che tu hai rilevato è dovuta solo al loader che alloca delle
variabili
per il caricamento e decompressione dell'exe.
L'OS provvede dopo alla deallocazione non appena la zona di memoria non è
utilizzata più
ciao
Lorenzo

 Lorenzo
Ciao
Andrea

Che ne dite ?
Citanto un vecchio sketch di Bertolino dico 
"d'altra parte e' cosi'" :-)
Non mi sono mai interessato ai meccanismi di caricamento degli exe da
parte di Windows (e i ricordi dell'esame universitario di s.o. non
sono utili)...
Probabilmente l'homepage di upx puo' dare questi e altri dettagli.
Ciao :-)


Grazie ragazzi, quindi l'unica soluzione è quella di trasportare moduli e
logica del programma all'interno di diverse DLL.
Questo però mi comporterà una serie lunga di modifiche. Credo proprio che
devrò riprogettare tutta la logica di lavoro del programma.
Ciao!

 ha scritto nel messaggio
news:tw09a.175769$YG2.5...@twister1.libero.it...


 ha scritto nel messaggio
news:b44f6r$1rvl42$1...@ID-160460.news.dfncis.de...


Si... però il codice diventa molto più complesso o sbaglio?
