Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1760 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  fuite mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fuite mémoire

n°841266
Toby14
Toby or not Toby
Posté le 03-09-2004 à 16:33:41  profilanswer
 

Salut,
 
j'ai un processus qui bouffe énormément de mémoire.
 
j'ai fait un script qui récupère des info sécurité sur un réseau intranet et qui enregistre le tout ligne par ligne dans des fichiers texte.
 
au début mon process fait 7.5 mo puis plus la taille du fichier txt augmente plus la mémoire utilisé augmente. genre si j'ai 20 mo et bien ca va faire 30 mo ... la derniere fois j'avais récupéré 150mo de txt. j'imagine pas a combien était monté mon process.
 
bref je penche pour un bleme avec le writeline ou qqchose comme ca.

mood
Publicité
Posté le 03-09-2004 à 16:33:41  profilanswer
 

n°842177
mareek
Et de 3 \o/
Posté le 04-09-2004 à 14:39:59  profilanswer
 

c'est difficile de t'aider sans plus de précisions sur le code


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°843097
Toby14
Toby or not Toby
Posté le 06-09-2004 à 09:44:44  profilanswer
 

je ne peux mettre mon code vu qu'il y a a peu pres 250 ligne mais je peux expliquer.
Dnas un premier temps je recupere la liste des pc dans le parc puis pour chacun je liste les dossiers partagés et je récupere dans un fichier txt les info de sécurité qui m'interresse sur ces dossiers sous dossiers et fichier qu'ils contiennent.
En gros un truc énorme.
 
Donc pensant que la place mémoire prise venait du fait que le fichier txt devenait de plus en plus gros j'ai décidé de fermer le fichier tous les 5 dossiers partagés, de détruire l'instance FSO puis d'en recréer un autre . Mais non.
 
Comment faire.
Je sais c pas évident mais merci tout de même.

n°843121
Taz
bisounours-codeur
Posté le 06-09-2004 à 10:42:51  profilanswer
 

essaie d'isoler le problème.

n°853983
Toby14
Toby or not Toby
Posté le 20-09-2004 à 11:49:48  profilanswer
 

Salut,
j'ai toujours le meme probleme de processus qui bouffe de la mémoire au fur et a mesure.
je recupere mes données sur les fichiers et je les insere dans une base MySQL.
Si qq a une idée sur mon pb? :cry:

n°854160
mareek
Et de 3 \o/
Posté le 20-09-2004 à 15:39:21  profilanswer
 

tu ne libère pas la mémoire que tu alloues


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°854830
Toby14
Toby or not Toby
Posté le 21-09-2004 à 13:59:17  profilanswer
 

mareek a écrit :

tu ne libère pas la mémoire que tu alloues


 
Et bien justement j'ai parcouru mon script et j'ai bien fait attention a faire un close puis je desalloue avec un beau nothing derriere une ouverture de fichier, de fermer les connection MySQL lorsque la requette a été exécuté. le seul hic c un objet WMI qui reste ouvert car lorque je parcours l'arborescence d'un dossier j'en ai besoin pour récupérer l'objet Folder qui sert à ressortir la collection des fichiers qu'il contient. l'objet en question c le FSO_text que j'ai crée en global puis j'alloue dans cette fonction

Code :
  1. sub Chercher_Fichier_Dossier_Dans_Partage(chemin, I, machine, nomCourant)
  2. on error resume next
  3. Dim Folder, SubFolder, File
  4.      ' Instanciation
  5.      Set Folder = FSO_text.getFolder("\\" & machine & "\" & nomCourant)
  6.      if Err<>0 Then
  7.          call Rapport_Erreur("  Une Erreur est survenue get folder" )
  8.         Err.Clear
  9.       end if
  10.       ' Incrementation de l'arborescence - dossiers
  11.       I = I + 1
  12.       ' On ne tient pas comptes des _vti, _derived, _notes (dossiers réservés à IIS),
  13.       ' Trouver la position du dernier '\' et vérifier si le caractère suivant est un _
  14.       If Mid(chemin, (Len(chemin) - Instr(StrReverse(chemin), "\" )+2),  1) <> "_" Then
  15.         ' Incrementation de l'arborescence - fichiers
  16.          I = I + 1
  17.          call secu(machine,Folder,"",nomCourant,chemin)
  18.         ' stocker tout les fichers contenu dans le répertoire courant
  19.          For Each File in Folder.Files
  20.     'recup de secu ntfs sur les fichiers contenus dans Folder
  21.     call secu(machine,Folder,File.Name,nomCourant,chemin)
  22.          Next
  23.          Set File = nothing
  24.          ' Décrémentation de l'arborescence - fichiers
  25.          I = I - 1
  26.       End If
  27.       ' Parcourir tout les sous-dossiers du dossier courant
  28.       for each SubFolder in Folder.SubFolders
  29.          ' Verifier si le dernier caractère du chemin vers le dossier
  30.          ' courant est un '\'
  31.          If Right(chemin,1) <> "\" Then
  32.     chemin = chemin & "\"
  33.          End If
  34.  If Right(nomCourant,1) <> "\" Then
  35.             nomCourant = nomCourant & "\"
  36.          End If
  37.          ' le dossier courant dans l'arbre
  38.          Call Chercher_Fichier_Dossier_Dans_Partage(chemin & SubFolder.Name, I, machine, nomCourant & SubFolder.Name)
  39.          ' Décrémentation de l'arborescence
  40.          I = I - 1
  41.          ' Prochain
  42.       Next
  43.       'Destruction des instances
  44.       Set SubFolder = nothing
  45.       Set Folder = Nothing
  46.       if Err<>0 Then
  47.          call Rapport_Erreur("  Une Erreur est survenue lors du parcours des fichiers partagés" )
  48.         Err.Clear
  49.       end if
  50. end sub


bon voila si ca peut vous aider à m'aider


Message édité par Toby14 le 23-09-2004 à 10:33:38
n°855243
mareek
Et de 3 \o/
Posté le 21-09-2004 à 20:55:48  profilanswer
 

Si il y a un pb de fuite mémoire, je ne crois pas qu'il soit dans cette fonction. pourrais tu poster le code de la foction secu() ?


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°856270
Toby14
Toby or not Toby
Posté le 23-09-2004 à 10:29:06  profilanswer
 

Code :
  1. '--------------------------------------------------------------------------------
  2. 'recupere les parametre de sécurité des dossiers ou fichiers passé en parametres
  3. 'puis écrit dans un fichier txt
  4. sub secu(machine, dossier, nomFichier, nomCourant, chemin)
  5.     on error resume next
  6.     dim ObjSet, refItem
  7.     if nomFichier = "" Then
  8.        Set ObjSet = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & machine & "\root\cimv2:Win32_LogicalFileSecuritySetting='" & chemin & "'" )
  9.     else
  10.      If Right(chemin,1) <> "\" Then
  11.            chemin = chemin & "\"
  12.         End If
  13.      Set ObjSet = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & machine & "\root\cimv2:Win32_LogicalFileSecuritySetting='" & chemin & nomFichier & "'" )
  14.     end if
  15.    
  16.     if Err<>0 then
  17.        call Rapport_Erreur("  erreur lors de l'appel au service wmi sur " & nomCourant & "\" & nomFichier & " surement du a une apostrophe" )
  18.        Err.clear
  19.        call insert_donnees(machine, nomFichier, chemin, "PB apostrophe", "voir directement", "le fichier" )
  20.     end if
  21.    
  22.     If ObjSet.GetSecurityDescriptor(refSD) = 0 Then
  23.        'call insert_donnees(machine, nomCourant,ObjSet.Path, refSD.Owner.Name,"", "" )
  24.        for each refItem In refSD.DACL
  25.            if nomFichier = "" then
  26.               Dim nouveauNomCourant
  27.             nouveauNomCourant = "\" & nomCourant
  28.             nouveauNomCourant = Mid(nouveauNomCourant,Len(nouveauNomCourant) - (Instr(StrReverse(nouveauNomCourant), "\" ))+2, Len(nouveauNomCourant))
  29.             call insert_donnees(machine, nouveauNomCourant, ObjSet.Path, refSD.Owner.Name, refItem.Trustee.Name, decodeAccessMask(refItem.AccessMask))
  30.            else
  31.               call insert_donnees(machine, nomFichier, ObjSet.Path, refSD.Owner.Name, refItem.Trustee.Name, decodeAccessMask(refItem.AccessMask))
  32.            end if
  33.        next
  34.        Set refSD = nothing
  35.        Set refItem = nothing
  36.     end if
  37.     if Err<>0 Then
  38.        call Rapport_Erreur("  Erreur dans la recheche Secu de " & nomCourant & " " & nomFichier & " path: " & ObjSet.Path)
  39.        Err.Clear
  40.     end if
  41.     Set ObjSet = nothing
  42.     nomFichier =""
  43. end sub


 
voici secu.
menfin je crois pas non plus qu'il y ait de fuite mémoire en fait.
Simplement vue que je fait du récursif, les boucle for s'embriquent.  
Sinon j'aurais pu faire de l'itératif et gérer une pile ou une file, mais j'aurais une pile énorme et donc cela prendrais aussi beaucoup de mémoire. Mais sans oute moins que d'embriquer des boucles for.


Message édité par Toby14 le 23-09-2004 à 10:33:02
n°2264273
grib51100
Posté le 11-08-2015 à 19:39:39  profilanswer
 

bonjour, j'ai eut le même problème et j'ai trouvé la solution sur un autre forum un enregistrement régulier de ton fichier permet de contenir ta mémoire.

mood
Publicité
Posté le 11-08-2015 à 19:39:39  profilanswer
 

n°2264278
kiki29
Posté le 12-08-2015 à 06:39:47  profilanswer
 

Salut, pas mal comme déterrage pour un Post du 23-09-2004 ( 11 ans )


Message édité par kiki29 le 12-08-2015 à 06:40:07

---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  fuite mémoire

 

Sujets relatifs
[Java] Problème de taille mémoire avec un JTree[ASM] Optim : précalcul en mémoire ou calcul sur registres ?
Mise en mémoire d'évènements midi : HashMap ?pile memoire - modification donnees
[Weblogic] pas assez de mémoire sous l'EDI Workshopgestion de la memoire
[Visual Basic] utilisation d'un dll C++ && fuite memoireAPI C de MySQL: fuite de mémoire
c coi une fuite de mémoire ?[C - Visual Studio] Detection de fuite mémoire
Plus de sujets relatifs à : fuite mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR