Newsgroup: it.comp.lang.delphi
Titolo: Mantenere eseguibile esterno in memoria

 
          Ciao a tutti,
in un mio progetto dovrei lanciare un eseguibile fatto da altri di cui non
ho i sorgenti circa un centinaio di volte.
Per velocizzare il tutto, avrei pensato di:
- Caricare in memoria l'eseguibile all'inizio del programma
- Lanciarlo dove serve (100 volte)
- Scaricarlo al termine del programma
In questo modo, evitando di leggerlo da disco per lanciarlo ogni volta,
dovrei ridurre i tempi di esecuzione.
Qualcuno mi sa dire se si può fare una cosa del genere ed eventualmente
come??
Grazie, Mario
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Devi crearti un disco virtuale con il comando dos
ramdisk.sys
ed usare i parametri che definiscono la dimensione, i blocchi ecc. da dare
al disco ram.
Sul sito della microsoft trovi la documentazione se ben ricordo.
Ciao
Mario - (
mari...@inwind.it
)


Teroicamnete quello che chiedi è fatto in automatico da windows.
Windows per velocizzare le prestazione tende a mantenere in memoria i
programmi appena eseguti.
Così se uno li rilancia subito dopo, sono gia caricati in memoria e
l'esecuzione risulta più veloce.
Se lanciate un'applicazione la chiudete e la rilanciate subito, la seconda
volta è più veloce.
E' chiaro che se il pc in questione ha poca RAM o un swapfile piccolo,
verrano eleminati subito dalla memoria.

 programmi appena eseguti.
Questa mi risulta nuova... :-)
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 Questa mi risulta nuova... :-)
Magari non sarà proprio come dice Nicolas, ma probabilmente restano in ram
dei blocchi di codice oggetto che il sistema non dealloca ma ritiene
disponibili utilizzandoli appena si cerca di caricare un altro programma.
Bisognerebbe documentarsi sulla gestione della memoria da parte di windows,
ma un fondo di verità su questa affermazione c'è. :D
Ciao!
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/

volta è più veloce.
E' un discorso diverso.  Tu alludi a meccanismi di "caching" del
sistema operativo, che non vogliono affatto dire "mantenere il file in
memoria".  Il processo viene comunque "scaricato" dalla memoria, alla
sua chiusura.

 ma un fondo di verità su questa affermazione c'è. :D
Se ci si riferisce alla gestione di una cache a livello hardware sono 
d'accordo; se ci si riferisce proprio alla memoria centrale RAM, si 
dovrebbe indagare.
Ciao,
   Marco.


Questa mi risulta nuova... :-)
forse si riferisce al prefetch di windows xp.
Ciao
--- posted by geoForum on 
http://www.delphiedintorni.it

forse si riferisce al prefetch di windows xp.
Il Prefetch di Windows XP non prevede il "mantenimento in memoria" dei
programmi appena eseguiti, ma è un meccanismo di "predizione", che
peraltro, in certi casi, può persino rallentare il sistema.  E
comunque non ha nulla a che vedere con quanto si sta discutendo.


Posso solo darti ragione. 
Il mio post è in risposta a quello di Breveglieri ("Questa mi risulta
nuova... :-)") che ha risposto a NicolaS ("Teroicamnete quello che chiedi
è fatto in automatico da windows.
  Windows per velocizzare le prestazione tende a mantenere in memoria i
  programmi appena eseguti.") nel quale scrivo che forse NicolaS si
riferisse al prefetch di Windows. 
Non ho risposto direttamente al messaggio oggetto del thread in quanto il
prefetch non è la soluzione del quesito, e anche se lo fosse funzionerebbe
solo per XP, e credo che la soluzione proposta da Mario Piva sia una buona
 idea, forse non l'unica ma buona, e credo anche funzionante su s.o.
antecedenti XP.
Ciao.


Per quel che ne so i programmi piu' recenti restano nella cache del disco, 
alla quale viene messa a disposizione una certa fetta di ram, quindi e' vero 
e facilmente verificabile che se rilanci un eseguibile due volte successive 
la seconda e' molto piu' rapida. Naturalmente il sistema deve essere ben 
dotato di RAM, fatti un po di conti senno' se le 100 applicazioni usano 
troppa memoria rischi che Windows usi la memoria virtuale e quindi il disco.
Ciao Giorgio 

Ho verificato ora che su windows 2000 pro installazione standard non viene
caricato ma su Windows 98II ed andava.
Si caricava in autoexec.bat il comando
Ramdisk.sys 2048, 512, 64 (devo controllare).
Per cui se il comado risiede in c:\Windows\System si deve aggiungere il
percorso la nome del file.
Ora non posso continuare ma ti prometto che guarderò cosa facevo in passato.
Nel dischetto di Win 98 c'era un esempio nell'autoexec.bat
Ciao
Mario



L'unico tentativo che mi sovviene è quello di creare un processo sospeso del 
tuo eseguibile (CreateProcess con il flag create_suspended), così da far 
mappare il suo codice in memoria e poi, per tutti i lanci successivi, 
istanziare con altri CreateProcess altre istanze dello stesso eseguibile. 
Windows attingerà il codice sempre da quell'unico segmento in memoria e 
istanzierà soltanto il segmento dati e lo stack (cosa inevitabile).
Il gioco vale la candela? Se fossi in te me ne fregherei.