Soyez le premier à donner votre avis sur cette source.
Snippet vu 15 723 fois - Téléchargée 27 fois
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
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.
@+
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!
ni trop court, ni trop long, c'est brillamment resumé.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.