Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Memoria RAM

Come si fa a "liberare" memoria RAM da VB ?
Ho creato un controllo che misura la memoria
libera e quella occupata, ma adesso vorrei, attraverso
uno slider, liberare dall'1 al'80% della memoria, selezionando
il valore sullo slider e poi cliccando su un pulsante.
Qualcuno può darmi una mano, per favore ?
Grazie
Lorenzo

 il valore sullo slider e poi cliccando su un pulsante.
Immagino tu voglia in realtà far swappare su disco quello che è attualmente
allocato e liberare spazio nuovo nella RAM fisica, giusto?
In questo caso, dovresti allocare tu lo spazio che vuoi liberare e poi
restituirlo a windows. Durante l'allocazione, Windows libera memoria per
potertela dare, e quando la liberi lui si trova spiazzato e lascia tutto
così com'è.
Potresti provare usando le api GlobalAlloc e GlobalFree.
Ciao
*Roby*
P.S.
Utility di questo tipo ce ne sono comunque già in giro diverse.

Utility di questo tipo ce ne sono comunque già in giro diverse.
Lo so, lo so, ma "programmando s'impara", e vuoi mettere la
soddisfazione di usare un prog "creato in proprio" ? Eh eh !
Scherzi a parte, devo inserire varie cose in un plurigestore
di Windows 98, e la gestione della RAM è una di queste.
Ti ringrazio !
Ciao !
Lorenzo

 Non le ho mai usate.
Prova qui:
http://kpdweb.cjb.net
Ciao
*Roby*

 Non le ho mai usate.
Prova qui:
http://kpdweb.cjb.net
Ciao
*Roby*
Grazie, Roby !  :-)
Ciao !


Se non hai pretese sulla precisione dell'effetto, puoi semplicemente
dichiarare un grosso array
per es. "Dim A(100000,100) As Integer" per liberare ca 20 MBytes
Puoi aggiustare la dimensione agendo sul numero di elementi e/o sul tipo di
variabili.
Se la dichiarazione avviene localmente in una subroutine chiamata ad hoc,
come la si abbandona VB rilascia subito la memoria allocata (ma la RAM
richiesta è già stata "swappata" sull'HD)
Spero di non sbagliare, ti conviene provare prima...   :-(
Ciao


<< Se non hai pretese sulla precisione dell'effetto, puoi semplicemente
dichiarare un grosso array
per es. "Dim A(100000,100) As Integer" per liberare ca 20 MBytes
Puoi aggiustare la dimensione agendo sul numero di elementi e/o sul tipo di
variabili.
Se la dichiarazione avviene localmente in una subroutine chiamata ad hoc,
come la si abbandona VB rilascia subito la memoria allocata (ma la RAM
richiesta è già stata "swappata" sull'HD)
Spero di non sbagliare, ti conviene provare prima...   :-(
Ciao >>
Ok, grazie, ma "praticamente" come dovrei fare ????????
Cioè, che sub devo scrivere ? Servono moduli, API ? Di che genere ???


Be, prova a creare una Sub (chiamiamola "Libera") che riceva come parametro
la memoria da liberare:
es:
Private Sub Libera(KBmemoria)
Dim a() As Integer
ReDim a(KBmemoria * 10, 50)
End Sub
Il ReDim è necessario altrimenti non accetta una variabile per impostare il
numero degli elementi.
E' sufficiente chiamare questa Sub passandogli come parametro la quantità di
KB da liberare.
L'ho provata usando il Monitor di Sistema per controllare e ho notato che
spesso, spec. con quantità ingenti da liberare, non si ottiene la memoria
desiderata al primo colpo ma è necessario ripetere la chiamata qualche volta
per riuscirci. Penso dipenda dal fatto che altri moduli in esecuzione si
"approprino" della quantità appena liberata, con quantità superiori infatti
non si riesce mai a raggiungere il livello desiderato.
Puoi comunque controllare da programma la quantità liberata (magari dopo un
piccolo ritardo) per decidere se richiamare la Sub.
Spero di esserti stato utile  :-)


<< Se non hai pretese sulla precisione dell'effetto, puoi semplicemente
dichiarare un grosso array
per es. "Dim A(100000,100) As Integer" per liberare ca 20 MBytes
Puoi aggiustare la dimensione agendo sul numero di elementi e/o sul tipo di
variabili.
Se la dichiarazione avviene localmente in una subroutine chiamata ad hoc,
come la si abbandona VB rilascia subito la memoria allocata (ma la RAM
richiesta è già stata "swappata" sull'HD)
Spero di non sbagliare, ti conviene provare prima...   :-(
Ciao >>
Funzia !!!!!!
Grazie !

Spero di esserti stato utile  :-)
Certo che sì !!!
Ho usato la tua istruzione, unita a quella di un altro gentile NGista,
e adesso il prog funzia !!!!! Yahooooooooooo !!!!!!!!!!!!!
Grazie (a tutti e due) !!!!!!!!!!!!
Ciao
Lorenzo