Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LIBÉRER DE LA RAM


Information sur la source

Catégorie :Système Classé sous : memoire, ram, liberer Niveau : Débutant Date de création : 23/03/2006 Vu : 10 571

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

C'est un morceau de code pour libérer une quantité voulue de RAM.
Je vous le donne tel quel, il suffit de le coller dans votre Form.

Si vous voulez le voir en action, visitez ce lien:

http://www.vbfrance.com/codes/TEMPERATURE-CHARGE-CPU-LIBERATION-MEMOIRE-POUR-CARTE-ASUS_36665.aspx

C'est une source qui récupère les infos des cartes Asus (mais le reste fonctionne avec les autres cartes) et accessoirement qui libère de la mémoire.

Voilà, j'espère que ça vous sera utile...
 

Source

  • Option Explicit
  • Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
  • Private Type MEMORYSTATUS
  • dwLength As Long
  • dwMemoryLoad As Long
  • dwTotalPhys As Long
  • dwAvailPhys As Long
  • dwTotalPageFile As Long
  • dwAvailPageFile As Long
  • dwTotalVirtual As Long
  • dwAvailVirtual As Long
  • End Type
  • Const OCTETVERSMO = &H100000
  • Private Sub Form_Load()
  • Dim lCompteur As Long
  • Dim MemStat As MEMORYSTATUS
  • Dim sFree() As String
  • Dim lMax As Long
  • Dim lInit As Long
  • Dim lQuantiteVoulue As Long
  • Dim lQuantite As Long
  • 'On récupère la valeur de la mémoire initiale
  • GlobalMemoryStatus MemStat
  • lInit = Int(MemStat.dwAvailPhys / OCTETVERSMO)
  • 'On demande la quantité à libérer
  • lQuantiteVoulue = InputBox("Quantité à libérer en Mo:", , 20)
  • lQuantite = lQuantiteVoulue
  • Do
  • 'lMax est le nombre de fois que l'on va attribué un Mo de mémoire à sFree
  • lMax = Int(MemStat.dwAvailPhys / OCTETVERSMO) / 2 + lQuantite + 5
  • 'On bouffe toute la mémoire
  • For lCompteur = 0 To lMax
  • ReDim Preserve sFree(lCompteur)
  • sFree(lCompteur) = String$(OCTETVERSMO, vbNullChar)
  • Next
  • 'On rend la mémoire prise
  • ReDim sFree(0)
  • DoEvents
  • 'On teste si il est encore possible de récupérer de la mémoire sinon on sort de la boucle
  • GlobalMemoryStatus MemStat
  • If lQuantiteVoulue - Int(MemStat.dwAvailPhys / OCTETVERSMO) + lInit > lQuantite And Int(MemStat.dwAvailPhys / OCTETVERSMO) > lInit Then
  • Exit Do
  • Else
  • lQuantite = lQuantiteVoulue - Int(MemStat.dwAvailPhys / OCTETVERSMO) + lInit
  • End If
  • 'On boucle jusqu'à la libération de la mémoire voulue
  • Loop Until Int(MemStat.dwAvailPhys / OCTETVERSMO) >= lInit + lQuantiteVoulue
  • Erase sFree
  • MsgBox (Int(MemStat.dwAvailPhys / OCTETVERSMO) - lInit) & " Mo ont été libérés.", vbInformation
  • End Sub
Option Explicit

Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type

Const OCTETVERSMO = &H100000

Private Sub Form_Load()

   Dim lCompteur As Long
   Dim MemStat As MEMORYSTATUS
   Dim sFree() As String
   Dim lMax As Long
   Dim lInit As Long
   Dim lQuantiteVoulue As Long
   Dim lQuantite As Long
   
   'On récupère la valeur de la mémoire initiale
   GlobalMemoryStatus MemStat
   lInit = Int(MemStat.dwAvailPhys / OCTETVERSMO)
   
   'On demande la quantité à libérer
   lQuantiteVoulue = InputBox("Quantité à libérer en Mo:", , 20)
   lQuantite = lQuantiteVoulue
   
   Do
      'lMax est le nombre de fois que l'on va attribué un Mo de mémoire à sFree
      lMax = Int(MemStat.dwAvailPhys / OCTETVERSMO) / 2 + lQuantite + 5
      
      'On bouffe toute la mémoire
      For lCompteur = 0 To lMax
         ReDim Preserve sFree(lCompteur)
         sFree(lCompteur) = String$(OCTETVERSMO, vbNullChar)
      Next
      
      'On rend la mémoire prise
      ReDim sFree(0)
      DoEvents
      
      'On teste si il est encore possible de récupérer de la mémoire sinon on sort de la boucle
      GlobalMemoryStatus MemStat
      If lQuantiteVoulue - Int(MemStat.dwAvailPhys / OCTETVERSMO) + lInit > lQuantite And Int(MemStat.dwAvailPhys / OCTETVERSMO) > lInit Then
         Exit Do
      Else
         lQuantite = lQuantiteVoulue - Int(MemStat.dwAvailPhys / OCTETVERSMO) + lInit
      End If
      
      'On boucle jusqu'à la libération de la mémoire voulue
   Loop Until Int(MemStat.dwAvailPhys / OCTETVERSMO) >= lInit + lQuantiteVoulue
   
   Erase sFree
   MsgBox (Int(MemStat.dwAvailPhys / OCTETVERSMO) - lInit) & " Mo ont été libérés.", vbInformation

End Sub

Commentaires et avis

signaler à un administrateur
Commentaire de Lucyberad le 24/03/2006 00:13:18

euh sur le code y'as rien a redire mais les liberations de memoire sont souvent synonymes de crash et bug, tu serait aps content qu'on t'enleve tes données de ton programme et qu'on te dise qu'il bug ensuite.
donc voila contrairement a ce qui est marqué dans la description (a ce que dit clementio) il est fortement déconseillé d'efectuer des purges de la memoire.

d'ailleurs j'ai pas testé mais est-ce que ca marche si ont on mets qu'on veut liberer 1024mo et que on as qu'une barette de 512?

signaler à un administrateur
Commentaire de clementio le 24/03/2006 00:18:34 administrateur CS

Le code est réduit au max donc tu peux mettre n'importe quelle valeur.

Par contre je ne comprend pas ce que tu veux dire par "qu'on t'enlève tes données"???

signaler à un administrateur
Commentaire de Lucyberad le 24/03/2006 00:47:05

ben c'est tout simple, la memoire que tu libere: tu enleve des données des autres programmes, par exemple:
un programme qui as une fonction historique ou meme un paint ayant une image dans la memoire, ca focement mal reagir au fait qu'on lui enleve les données sous le nez.
je parle donc du fait que liberer de la memoire est d'un coté benefique, mais de l'autre nefaste a la stabilité générale du systeme.

signaler à un administrateur
Commentaire de clementio le 24/03/2006 00:59:00 administrateur CS

Je vois ce que tu veux dire mais je pense (je dis bien je pense) que Windows est capable de se débrouiller en jonglant entre la mémoire virtuelle et physique pour ne pas perdre de données. En gros, je crois que la mémoire physique gagnée est égale à la mémoire virtuelle perdue. D'ailleurs je vais faire des tests là-dessus du coup ;-)...

Mais bon, je peux toujours me tromper...

signaler à un administrateur
Commentaire de Willi le 24/03/2006 10:18:33 administrateur CS

Il n'y a pas de miracle, je suis d'accord avec Lucyberad.
La meilleur solution reste à mon avis de laisser Windows gérer la mémoire comme un grand :)

signaler à un administrateur
Commentaire de Renfield le 24/03/2006 11:07:41 administrateur CS

le même genre de code là:

http://www.vbfrance.com/codes/DEFRAGMENTEUR-RAM_27226.aspx

signaler à un administrateur
Commentaire de Lucyberad le 24/03/2006 11:31:29

le meilleur moyen de liberer la ram est d'avoir un pc sain (sans virus ni rien) controler les programmes que l'on installe (certain ont des programme qui sont des vrai déchêts).
c'est avec ce genre de script que on arrete pas de dire que windows fais des messages bleu.

donc voila, comme je le disait precedemment: le code est bon mais a aucun interet.

signaler à un administrateur
Commentaire de Lucyberad le 24/03/2006 20:01:06

j'ai trouvé un outil qui peut etre plus approprié pour gerer des comsommation de memoire etc... en gros travailler avec...
j'ai trouvé ce lien qui explique c limpidement ce que c'est:
http://faqvbnet.developpez.com/?page=syst#syst_gc
ca m'as bien fait rire quand j'ai vu ca mais au moins j'ai bien compris comment ca fonctionnait.

signaler à un administrateur
Commentaire de MadM@tt le 25/03/2006 14:09:15

Y'a déjà eu un débat autour d'un code qui faisait la même chose. En fait ce qu'il se passe, c'est que ce programme ne supprime pas la mémoire des autres programmes pour libérer de la place, ce qu'il fait c'est qu'il crée un grand espace mémoire, donc windows (pour pouvoir créer cet espace) déplace toute la mémoire ram qui n'est pas utilisée récemment dans la mémoire virtuelle (disque dur).
Si on libère peu de mémoire, généralement c'est les espaces de mémoires les moins utilisés (genre un programme que ta lancé depuis lontemps) qui va aller en mémoire virtuelle, donc c'est pas trop génant sauf quand tu voudra rouvrir la fenetre de ce programme car il va le sortir du disque dur pour retravailler dessus. Donc dans ce cas ça libère de l'espace mémoire RAM donc c'est utile, seulement ça va ralentir les programmes peu utilisé qui sont lancés.
Deuxième cas : tu veux libérer beaucoup de mémoire vive (c'est la meme chose qui se passe après avoir joué à un jeu, quand tu quitte, windows est super lent à tout remettre en place). Dans ce cas, meme les programmes utilisés vont aller sur le disque dur en mémoire virtuelle pour faire de la place à ton bloc de mémoire que tu crée. Après, le bloc de mémoire de ton prog est supprimé et hop il y a plein de mémoire vive libre, seulement tout tes prog tournent sur le disque dur donc ton pc est hyper lent.

Au final : tu peux pas libérer de la mémoire vive sauf en terminant des programmes, ce procédé sert juste à "mettre de coté" les programmes non utilisés qui sont en mémoire.
=> A utiliser avec modération ;)

Voilà j'espère que ça aura pu vous apporter des infos et que je n'ai pas trop fait d'erreur ;)

signaler à un administrateur
Commentaire de Lucyberad le 25/03/2006 17:49:41

MadM@tt > "Voilà j'espère que ça aura pu vous apporter des infos"
ni trop court, ni trop long, c'est brillamment resumé.

signaler à un administrateur
Commentaire de MadM@tt le 25/03/2006 19:31:45

;) merci quand j'ai relu j'ai eu l'impression que jme la racontait un peu lol, mais j'ai appris ça sur l'autre source dont je parlait, donc je fais juste circuler l'info

signaler à un administrateur
Commentaire de guigui265 le 27/03/2006 11:46:28

Lucyberad, ce code n'a peut etre pas d'interet pour toi, mais il permet d'aborder certaines notions de développement, il est donc interessant pour qui veux apprendre,c'est mon avis !!
car sur tout le site,avec tout les language, je pense qu'il n'y a pas beaucoup de sources utiles au premier sens du terme, mais elles sont souvent ludiques!

signaler à un administrateur
Commentaire de Lucyberad le 27/03/2006 14:39:44

c'est pour ca que j'ai dit dans mon 1er post: "sur le code y'as rien a redire" << je voulai dire par la que le code repond a ce que il doit etre prevu et que c'est quand meme bon de l'apprendre.

signaler à un administrateur
Commentaire de violent_ken le 20/10/2006 13:37:07

Certes. Cela me fait penser au soft "RamBoostXP" (ou un truc dans le genre), il est vraiment inutile. Remplit, la RAM, fait passer tout le contenu ancien de la RAM dans le SWAP, et paf, PC hyper lent parce qu'il doit recharger à l'ouverture de chaque programme le contenu du SWAP dans la RAM.

Cela dit, le code présenté ici remplit sa tache, même si le résultat n'est pas forcément souhaitable. Donc en ce sens, çà marche.

Mais autre chose : le type Long est un faible (limité à +-2^31) ==> calculs erronés pour plus de 2Go de RAM.

De même que le type String, qui est limité à 2^31 caractères.

@+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

liberer de la ram [ par hhhp2004 ] hhhp2004salut,je viens de faire un prog qui montre la quantite de ram totale, utilise et disponible. il marche tres bien ....jai pas beaucoup de ram ( Vider la memoire RAM [ par norton ] Hello, a tous je me demandais si c'étai possible de vider la mémore ram a un interval régulier en VB.si c'est possible comment faire.je suis pas expèr Liberer memoire [ par loskiller62 ] Lorsque j'excute certaines fonctions de mon programme, ou que je charge puis decharge (unload) un formulaire, la mémoire prise n'est pas rendue.Ex: Mo tabstrip memoire [ par bobo91 ] bonjour a tous ceux qui lirons ce message. bien je commence alors.comment faire pour garder des informations en cours sur la page d'un onglet.par exem Réseau et vitesse [ par gronon2 ] J'ai une application installé sur un poste Xce poste X fait parti d'un réseau ordinaire Microsoft ( 5 ordinateurs connectés)J'ai crée des raccourcis Determination de la quantité de RAM [ par kulls ] Bonjour a tous,Voila, j'ai une question que me travaille depuis plusieurs semaine et je n'arrive pas a la programmer (c'est peut et re un peu normal v fenetre reste dans la memoire [ par ifaza ] La fleur MarocaineAu secourssur un programme j'ai un formulaire que je l'utilise plusieurs fois en changeant des variables in Probleme de creation de memoire [ par dragon_rouge ] Je cherche a creer autant de memoire que je veut mais durant l'execution!En creation on peut creer autant de memoire que l'on veut (ex :Dim Memoire1 a VIDER LE MEMOIRE pour accelerer [ par vincentmedan ] Bonjour à tous,j'ai un soucis avec une macro dans EXCEL.En effet je realise des calculs sur environ 500 000 cellules et lorsque je lance ma macro les memoire, version logiciel [ par florian1978 ] Bonjour Je desire crée un logiciel me permettant de recuperer certaines informations. le programme sera crée comme suit : un boutton + une list box je


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,671 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.