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 !

Sujet : Optimiser du code prennant beacoup trop de mémoire VB.NET [ Divers / General ] (dimitriusai)

samedi 8 mars 2008 à 08:21:57 | Optimiser du code prennant beacoup trop de mémoire VB.NET

dimitriusai

Amis programmeurs du week end, bonjour.
J'ai dévelloppé une petite application qui a mes yeux semblent avoir un soucis, en effet, celle ci prend de la mémoire de facon démessurée, elle démarre à 10000ko et ne fait qu'augmenter.

Le problème ne semble pas venir de la connection sql car en la commentant, cela fait le même problème. Je crois que c'est à cause des WMI, si qqun a une idée

Imports System
Imports System.EventArgs
Imports System.Management
Imports System.Threading

Public Class Service1

    'Ip du serveur MySql.
    Dim SQL_server As String = "**********"
    'User id MySql.
    Dim SQL_userid As String = "*******"
    'User password Mysql.
    Dim SQL_password As String = "**************"
    'Database MySql.
    Dim SQL_DATABASE As String = "************"
    Dim my_memory As Double
    Dim my_memory_total(4) As Double
    Dim my_server As String
    Dim my_cpu As Double
    Dim my_cpu_total(4) As Double
    Dim my_cpu_load As Double
    Dim my_cpu_frequency_max As Integer
    Dim my_cpu_frequency_use As Integer
    Dim boucle As String = ""

    Dim VDLB_VAR As New VDLB()

    Protected Overrides Sub OnStart(ByVal args() As String)
        Perf()
        ' Ajoutez ici le code pour démarrer votre service. Cette méthode doit
        ' démarrer votre service.
    End Sub

    Protected Overrides Sub OnStop()

        ' Ajoutez ici le code pour effectuer les destructions nécessaires à l'arrêt de votre service.
    End Sub

    Sub Perf()
        Do
            Dim i As Integer
            For i = 0 To 4

                Try
                    Dim searcher As New ManagementObjectSearcher( _
                        "root\CIMV2", _
                        "SELECT * FROM Win32_OperatingSystem")

                    For Each queryObj As ManagementObject In searcher.Get()
                        Dim max_memory As Double = (queryObj("TotalVisibleMemorySize"))
                        Dim available_memory As Double = (queryObj("FreePhysicalMemory"))
                        my_memory = (1 - (available_memory / max_memory)) * 100
                    Next
                    my_memory_total(i) = my_memory
                Catch err As ManagementException
                    'Console.WriteLine("An error occurred while querying for WMI data: " & err.Message)
                End Try

                'On va rechercher la valeur de la charge du cpu

                Try
                    Dim searcher As New ManagementObjectSearcher( _
                        "root\CIMV2", _
                        "SELECT * FROM Win32_Processor")
                    For Each queryObj As ManagementObject In searcher.Get()
                        my_cpu_load = (queryObj("LoadPercentage"))
                        my_cpu_frequency_max = (queryObj("MaxClockSpeed"))
                        my_cpu_frequency_use = (queryObj("CurrentClockSpeed"))
                        my_cpu = ((my_cpu_load * my_cpu_frequency_use) / my_cpu_frequency_max)
                    Next
                    my_cpu_total(i) = my_cpu
                Catch err As ManagementException
                    'Console.WriteLine("An error occurred while querying for WMI data: " & err.Message)
                End Try
                Thread.Sleep(60000)

            Next i

            my_memory = ((my_memory_total(0) + my_memory_total(1) + my_memory_total(2) + my_memory_total(3) + my_memory_total(4)) / 5)
            my_cpu = ((my_cpu_total(0) + my_cpu_total(1) + my_cpu_total(2) + my_cpu_total(3) + my_cpu_total(4)) / 5)

            'On va rechercher la valeur du nom du serveur(ComputerName)

            Try
                Dim searcher As New ManagementObjectSearcher( _
                    "root\CIMV2", _
                    "SELECT * FROM Win32_OperatingSystem")
                For Each queryObj4 As ManagementObject In searcher.Get()
                    my_server = (queryObj4("CSName"))
                Next
            Catch err As ManagementException
                'Console.WriteLine("An error occurred while querying for WMI data: " & err.Message)
            End Try

            'On se connecte à la Db

            Try
                VDLB_VAR.Connect(SQL_server, SQL_userid, SQL_password, SQL_DATABASE)
            Catch ex As Exception
                'Console.WriteLine(ex.Message)
            End Try

            If (VDLB_VAR.ConnectionStatus) Then

                'On va rechercher la valeur de la mémoire physique disponible et la mémoire physique total, et on ressort le pourcentage utilisé par exemple 49

                Try
                    VDLB_VAR.MySQL_Query("UPDATE vdlb_perf SET memory = '" & my_memory & "' , cpu = '" & my_cpu & "'   WHERE server='" + my_server + "'")
                    VDLB_VAR.CloseClass()
                Catch ex As Exception
                    'Console.WriteLine(ex.Message)
                End Try
            Else
                Console.WriteLine("Erreur SQL")
                Thread.Sleep(300000)
            End If

        Loop While boucle = "s"
    End Sub
End Class



Si qqun a une idée sur la chose ? car j'ai des codes fesant 10 x cette taille là et prenant même pas 700ko en mémoire.

Merci d'avance

samedi 8 mars 2008 à 09:43:04 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

jmfmarques

Membre Club
Réponse acceptée !

Bonjour,

Je ne connais rien à VB.Net.

Par instinct, toutefois :

Je libèrerais Searcher avant d'en recréer un

Tu n'as pas quelquechose, sous VB.Net, comme Searcher.Dipose ... ou set Searcher = Nothing ... ou autre chose du genre ?


samedi 8 mars 2008 à 09:47:32 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

scottmat

Membre Club
Réponse acceptée !
normalement non, mais bon tu peut l'optimiser en le déclarant qu'une fois.

et pour liberer la mémoire c'est bien dispose jmfmarques ;)

samedi 8 mars 2008 à 10:10:29 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

casy

Membre Club
Réponse acceptée !
Problèmes d'objets créer et non détruit.

Pour commencer ceci :
            Dim i As Integer
            For i = 0 To 4
à chauqe tour de ta boucle Do, tu crée une variable i, qui ne te sert que dans la boucle For, la précédente n'étant pas forcément détruite. Utilise plutot ceci, ta variable i sera automatiquement marquée libérable à la fin de la boucle For
            For i As Integer = 0 To 4


Ensuite pour Searcher, tu crée les objets, mais jamais tu ne les détruits.
Essaye peut-etre d'encadrer ton code utilisant l'objet dans un Using, l'objet créé par le using étant automatiquement détruit à la fin du Using :

                   Using searcher As New ManagementObjectSearcher( _
                        "root\CIMV2", _
                        "SELECT * FROM Win32_Processor")
                    For Each queryObj As ManagementObject In searcher.Get()
                        my_cpu_load = (queryObj("LoadPercentage"))
                        my_cpu_frequency_max = (queryObj("MaxClockSpeed"))
                        my_cpu_frequency_use = (queryObj("CurrentClockSpeed"))
                        my_cpu = ((my_cpu_load * my_cpu_frequency_use) / my_cpu_frequency_max)
                    Next
                    my_cpu_total(i) = my_cpu
                    End Using

Si le using ne marche pas, mais simplement un searcher=Nothing juste avant le Catch

Rien que ça devrai, je pense amélioré un peu les choses.

Info : En .Net, la libération de la mémoire est à la charge du Garbage Collector. Elle n'est pas forcément instantanée.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]

samedi 8 mars 2008 à 18:29:17 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

dimitriusai

Merci bcp les gars, du code de vendredi soir !!! faut être indulgant.  Je test cela lundi au boulot.

++ etmerci à tous

lundi 31 mars 2008 à 13:08:10 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

laurent207

bonjour,

J'ai le même problème que toi, mon appli qui tourne comme service windows augmante sans arrêt en mémoire.

Elle commence à 36Mo et augmante progressivement et constament. Alors j'ai lu sur des forum qu'une appli .net démarre en utilisant environ 30Mo. Donc, si la tienne prend que 20Mo c'est bien, mais augmente-t-elle en mémoire ?

laurent207

lundi 31 mars 2008 à 13:47:20 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

dimitriusai

Après une optimisation, comme expliquée ci dessus, et surtt l'utilisation du garbage collector, j'ai réussi à stabiliser l'utilisation mémoire à 17mo, et le logiciel tourne depuis 3 semaines sans problème et augmentation en ram.


vendredi 11 avril 2008 à 12:39:14 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

laurent207

est-ce que je peux voir ton code, stp.

pour chaque objet (integer, string, ping, searcher, ldap ou autre), j'ai mit une .dispose et objet=nothing, dés que j'en ai plus bessoin. J'ai aussi fait un for i as integer, mais ça na pas l'air de marcher. Maintenant au lieu de monter à 600Mo, je monte à 70Mo au bout de 2 jours.

laurent207

vendredi 11 avril 2008 à 12:42:04 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

dimitriusai

Fait un appel au garbage collector comme expliqué au dessus.
à la fin de ta boucle
System.GC.Collect()

Déso mais le code est confidentiel vu l'utilité qu'il a


vendredi 11 avril 2008 à 13:00:43 | Re : Optimiser du code prennant beacoup trop de mémoire VB.NET

laurent207

pardon, j'ai oublié de dire que j'ai mit ça aussi

System.GC.Collect()
System.GC.WaitForPendingFinalizers()

laurent207


1 2

Cette discussion est classé dans : end, my, total, cpu, memory


Répondre à ce message

Sujets en rapport avec ce message

Update Double avec mysql (vb.net) [ par dimitriusai ] J'ai un petit soucis d'insertion dans une db sql Dim my_memory <font s Nombre de coche [ par TiteZ ] Re bonjour,Oui oui , c'est vrai, je vous l'accorde aujourd'hui je monopolise pas mal le forum... Objectifs:je souhaite faire un tableau ( et puis apré comment transformer le code d'une procédure sub en function ? (vba pour excell) [ par drine des iles ] Bonjour,L'internaut jpleroisse m'a transmis ce code pour m'aider à additionner toutes les cellules d'une plage de taille variable. Comment faire pour My.MyApplication [ par veler ] Salut,J'ai un code que j'aimerais compilé via mon application.J'ai un petit problème avec la class MyApplication. Mon compilateur me dit que IsSingleI Récupérer les performances (CPU ET MEMORY) en vb.net [ par dimitriusai ] Bonsoir, je suis à la recherche d'un moyen afin de récuprer la charge du cpu et la mémoire restante, afin de les intégrer dans mon programme de balanc tri combobox [ par Fabian123 ] Bonjour!Voila ma question:j'ai un tableau fait dans excel, trois colonnes: une avec la catégorie d'articles, une avec les articles et une avec le prix Pbm sur un macro de mise en forme d'un graphique issu d'un tableau croisé dynamique [ par ShaVBA ] Bonjour,J'ai rédigé une macro pour mettre en forme mes graphiques croisés dynamiques cependant je fais face à un problème que je ne sais pas ressoudre Raccourcir un code [ par cruise1406 ] Est-ce que quelqu'un saurait comment rendre plus lisible et surtout plus court mon morceaux de code car je dois répété ceci pour chaque chk :Private S Désactiver un tab d'un SSTAB (4 au total) et le réactiver après [ par beegeezzz ] Bonjour tout le monde, Je voudrais savoir si il est possible lors du chargement d'un SSTAb de désactiver un des onglets ? J'en ai 4 en tout. Ensuite, probleme couleur dans listview [ par steph064 ] Quand je trie ma listView en cliquant sur les colonnes, je perds les couleurs que j'y avais mis lors de la création de la liste. Le problème ne se pos


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 : 2,683 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é.