|
Trouver une ressource
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)
Informations & options pour cette discussion
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 ClassSi 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
|
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
|
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
|
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
|
|
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|