VB et mémoire

La section pour partager vos scripts et demander de l'aide dans vos scénarios.

Modérateur: HoMIDoM

VB et mémoire

Messagede cirdec007 » 07 DĂ©c 2015, 14:17

Bonjour,

J'exécute un script vb toutes les minutes qui lit un fichier XML et récupère plusieurs valeurs.
Au fur et à mesure de l'exécution de ce script, le mémoire du service HOMISERVICE.exe augmente jusqu'à saturer celle-ci après plusieurs jours.

Il semblerait que le script VB ne libère pas entièrement la mémoire utilisée lors de son exécution.

Que puis-je faire/tester pour palier à ce problème
cirdec007
Membre Actif
 
Messages: 30
Inscription: 08 Sep 2015, 10:38

Re: VB et mémoire

Messagede MathPan » 07 DĂ©c 2015, 19:23

Bonjour,
Peux tu nous envoyer ton script, stp, pour voir si il y a quelque chose Ă  faire.
@+
HoMIDoM- Le système complet et gratuit de domotique pour la maison
ModbusTCP avec automates WAGO pour gestion éclairage, prise, VMCDF, Chauffage elec, volet de toute la maison
RFXtrx pour gestion des télécommandes, des sondes et pinces ampèremétrique
Téléinfo EDF - Station Netatmo - Thermostat et détecteur Nest
Client Imperihome - HoMIWpf - SARAH - IFTTT - RPI avec KODI - GoogleCalendar
Avatar de l’utilisateur
MathPan
Guru de domotique
 
Messages: 124
Inscription: 16 AoĂ» 2012, 16:14

Re: VB et mémoire

Messagede cirdec007 » 18 DĂ©c 2015, 14:38

Voici mais surement à améliorer :-)

' Pince 10A la valeur devra-t’être multiplié par 0.00323
' Pince 20A la valeur devra-t’être multiplié par 0.00646
' Pince 50A la valeur devra-t’être multiplié par 0.01615



Imports System
Imports System.Xml
Imports System.IO
Imports System.Net
' Imports System.Windows.Forms
' Imports Microsoft.VisualBasic
Imports Homidom
' Imports Homidom.homidom
' Imports HoMIDom.HoMIDom.Device
' Imports HoMIDom.HoMIDom.Api
' Imports System.Threading



Namespace Dynam


'Ne pas supprimer cette class
Public Class DynamicCode

' Fonctions
' ----------

' Fonction Ecriture des valeurs dans un fichier pour historisation
' ----------------------------------------------------------------
Function EcritureFichier(NomDuComposant as string,ValeurDuComposant as string, TypeDuComposant as string)
Dim sw As StreamWriter
Dim strFile As String = "C:\Homidom\Historique\data.csv"
sw = File.AppendText(strFile)
sw.WriteLine(DateTime.Today.ToString("yyyyMMdd") & ";" & DateTime.Now.ToString("HH:mm:ss") & ";" & NomDuComposant & ";" & ValeurDuComposant & ";" & TypeDuComposant)
sw.Close()
return sw
End Function

' Fonction envoi requĂŞte http
' ---------------------------
Public Sub Sendhttp(ByVal Commande As String)
Try
Dim reader As StreamReader = Nothing
Dim str As String = ""
Dim request As WebRequest = WebRequest.Create(Commande)
Dim response As WebResponse = request.GetResponse()
reader = New StreamReader(response.GetResponseStream())
str = reader.ReadToEnd
reader.Close()
Catch ex As Exception
' _Server.Log(Server.TypeLog.ERREUR, Server.TypeSource.SCRIPT, "Sendhttp", "Erreur lors de l'envoi de la commande http: " & ex.Message)
End Try
End Sub


' --------------------------------
' --------------------------------
' --------------------------------


'Ne pas supprimer cette function
Public Function ExecuteCode(paramarray prmParameters() as object) as object





Dim Serveur as Homidom.Homidom.server

Serveur=prmParameters(0)





Dim Composant As String
Composant = "Empty"
Dim ComposantValue As String
' Dim ValeurRefresh as Integer

Dim ComposantValueTest

Dim HomidomServer = "123456789"
Dim IN1 = "9925c7e9-c7c0-435a-a38d-947414fb6155"
Dim IN2 = "0e9b396a-6cf8-4e78-8939-990d60f384a8"
Dim IN3 = "60e221eb-b890-4ff3-8d7d-810b87087404"
Dim IN4 = "25e6c121-54ed-4d36-81a4-f7127b9e547e"
Dim IN5 = "0f904982-e70a-478c-b74d-642e2bed9c7c"
Dim IN6 = "1fe2c264-822c-40e9-a824-f994a10b3a4a"
Dim IN7 = "55a090e0-b190-451b-b8df-a39c8b4f95ca"
Dim IN8 = "8e90d9dc-9330-477d-bfc1-c392b8a56cbe"

Dim OUT1 = "d8a69eb9-8ebc-4e85-851b-901ad081ca7a"
Dim OUT2 = "0af5c0c7-9bba-4e2b-a3aa-a9c1fd8eee04"
Dim OUT3 = "d941ed33-c9ac-40b5-bdb5-018e49429eaf"
Dim OUT4 = "0d6f469c-f2b8-448a-9d3f-bd0e7c8d5109"
Dim OUT5 = "92eb6dff-357c-4893-8c55-c826442d90cc"
Dim OUT6 = "b086fb02-52bb-447e-8612-67075cbef547"
Dim OUT7 = "169a4419-d7c9-4d5d-b13c-b41e9659fc6e"
Dim OUT8 = "b6d85d65-cdf2-4535-a6a0-16c429f7f37d"

Dim Analog1 = "8571b37d-f037-41cd-b6a7-4f44bf21e9b4"
Dim Analog2 = "1f450138-066d-4f5c-8119-d6b9189862d0"
Dim Analog3 = "95cf226f-675e-4990-86cf-193b42eaf1df"
Dim Analog4 = "08e758dc-4197-4498-8a2d-1b33a256a9b5"
Dim Analog5 = "81b6d096-3735-469a-a657-682425dd5e42"
Dim Analog6 = "251ed683-e8c0-4eb8-ba7a-31761e7d1e7c"
Dim Analog7 = "5dd3e41e-829e-424d-9abd-7fd9f90e68cb"
Dim Analog8 = "3333cbd0-4ae4-4aa2-8ecc-6907bb39c981"

Dim Count0 = "5cdecb20-8442-4a19-8473-c753fc5c374a"
Dim Count1 = ""

Dim TemperatureExterieure = "46b529fe-edca-421c-bd44-9bf645433852"
Dim PiscineTemperatureArrivee = "0ea6f269-8d15-44df-a498-7af02c3a3060"
Dim PiscineTemperatureDepart = "002c45e4-7b39-4a08-9e4e-a616570169a5"
Dim PiscineConsomationEau = "70c649fb-31e3-467f-b967-e7e0a7469933"
Dim PiscineEtatFiltration = "f6136f77-036f-48e4-acfa-27f077abff38"
Dim PiscineEtatPompeAChaleur = "5c579462-eade-4954-bb92-4d311fd02b0d"
Dim PiscineEtatSpotPiscine = "7aa196dc-1d2f-475c-a90e-d98246c050c3"
Dim GelExterieurEtat = "6d5e5ce0-f78e-44cb-8ab3-cdd4632856c9"

Dim ComposantIPX800AbrisDeJardinReceptionPush = "c5a38fee-df86-435f-8294-82b94ae57e38"

Dim TimerCompteur1 = "34bb7278-7507-4be9-8fcb-084791f71168"
Dim TimerCompteur2 = "3f3679b6-8eef-4beb-86a6-ebbdf09ec3d4"

Dim ConsommationElectriqueAbrisDeJardin = "31bea5d1-5cff-4976-93f4-1ab0ff824c9e"
Dim ConsommationElectriqueFiltration = "d80bf7a2-aba6-44b7-99a9-4a0a69804f9d"
Dim ConsommationElectriquePompeAChaleur = "9d951a7b-7a5b-43e9-b0a5-b6d0078f3995"

Dim EtatOut1 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatFiltration )
Dim EtatOut2 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatPompeAChaleur )
Dim EtatOut6 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatSpotPiscine )
Dim EtatOut8 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,GelExterieurEtat )
Dim EtatOut1Value = EtatOut1.Value
Dim EtatOut2Value = EtatOut2.Value
Dim EtatOut6Value = EtatOut6.Value
Dim EtatOut8Value = EtatOut8.Value


Dim x as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ComposantIPX800AbrisDeJardinReceptionPush )
Dim TimerCompteur1Value as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,TimerCompteur1 )
Dim TimerCompteur2Value as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,TimerCompteur2 )
Dim ConsommationElectriqueAbrisDeJardinValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriqueAbrisDeJardin )
Dim ConsommationElectriqueFiltrationValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriqueFiltration )
Dim ConsommationElectriquePompeAChaleurValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriquePompeAChaleur )

Dim Counter1Composant as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,Count0 )
' ValeurRefresh=x.VariablesOfDevice("Refresh")
' x.VariablesOfDevice("Refresh")=ValeurRefresh + 1

Dim Tensionsecteur = "245"


const URLString as String = "http://192.168.25.21/globalstatus.xml"

Dim reader As XmlTextReader = New XmlTextReader (URLString)
Do While reader.Read
Select Case reader.NodeType
Case XmlNodeType.Element
Composant = (reader.name)
Case XmlNodeType.Text
ComposantValue = (reader.value)
Select Case Composant
Case "analog0"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,TemperatureExterieure,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog1,ComposantValue)
EcritureFichier ("TemperatureExterieure", (String.Format("{0:0.00}", (ComposantValue*0.323-50))), "Temperature")
' x.VariablesOfDevice("Refresh") = 0
End If
Case "analog1"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineTemperatureArrivee,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog2,ComposantValue)
EcritureFichier ("TemperatureAbrisDeJardin", (String.Format("{0:0.00}", (ComposantValue*0.323-50))), "Temperature" )
End If
Case "analog2"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineTemperatureDepart,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog3,ComposantValue)
EcritureFichier ("PiscineTemperatureDepart", (String.Format("{0:0.00}", (ComposantValue*0.323-50))) , "Temperature")
End If
Case "analog3"

Case "analog4"
Serveur.ChangeValueOfDevice(HomidomServer,Analog5,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueAbrisDeJardin,(ComposantValue+ConsommationElectriqueAbrisDeJardinValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationAbrisDeJardin", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriqueAbrisDeJardinValue.Value)*0.00646/60*Tensionsecteur))) , "ConsommationElectrique" )
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,"0")
End if
Case "analog5"
Serveur.ChangeValueOfDevice(HomidomServer,Analog6,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,(ComposantValue+ConsommationElectriqueFiltrationValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationPiscineFiltration", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriqueFiltrationValue.Value)*0.00323/60*Tensionsecteur))) , "ConsommationElectrique")
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,"0")
End if

Case "analog6"
Serveur.ChangeValueOfDevice(HomidomServer,Analog7,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriquePompeAChaleur,(ComposantValue+ConsommationElectriquePompeAChaleurValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationPiscinePompeaChaleur", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriquePompeAChaleurValue.Value)*0.00323/60*TensionSecteur))) , "ConsommationElectrique")
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriquePompeAChaleur,"0")
End if

Case "analog7"


Case "count0"
If (TimerCompteur1Value.value >= "30") then
'and (ComposantValue <> Counter1Composant.value)) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineConsomationEau,ComposantValue)
Serveur.ChangeValueOfDevice(HomidomServer,Count0,ComposantValue)
EcritureFichier ("ConsommationEau", ComposantValue, "ConsommationEau")
Sendhttp ("http://192.168.25.21/protect/assignio/counter1.htm?num=0&counter=0")
End If
Case "btn0"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN1,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN1,"false")
Case "btn1"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN2,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN2,"false")
Case "btn2"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN3,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN3,"false")
Case "btn3"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN4,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN4,"false")
Case "btn4"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN5,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN5,"false")
Case "btn5"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN6,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN6,"false")
Case "btn6"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN7,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN7,"false")
Case "btn7"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN8,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN8,"false")

Case "led0"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT1,"true")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatFiltration,"true")
ComposantValueTest = "True"
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT1,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatFiltration,"false")
ComposantValueTest = "False"
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("Filtration", ComposantValue, "Etat" )
End If
If (EtatOut1Value <> ComposantValueTest) then
EcritureFichier ("Filtration", ComposantValue, "Etat" )
End If
Case "led1"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT2,"True")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatPompeAChaleur,"True")
ComposantValueTest = "True"
End if
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT2,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatPompeAChaleur,"False")
ComposantValueTest = "False"
end if
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("Chauffage", ComposantValue, "Etat")
End If
If (EtatOut2Value <> ComposantValueTest) then
EcritureFichier ("Chauffage", ComposantValue, "Etat")
End If
Case "led2"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT3,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT3,"false")
Case "led3"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT4,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT4,"false")
Case "led4"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT5,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT5,"false")
Case "led5"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT6,"true")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatSpotPiscine,"true")
ComposantValueTest = "True"
End if
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT6,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatSpotPiscine,"false")
ComposantValueTest = "False"
End if
If (EtatOut6Value <> ComposantValueTest) then
EcritureFichier ("SpotPiscine", ComposantValue, "Etat")
End If
Case "led6"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT7,"true")
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT7,"false")
End if
Case "led7"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT8,"true")
Serveur.ChangeValueOfDevice(HomidomServer,GelExterieurEtat,"true")
ComposantValueTest = "True"
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT8,"false")
Serveur.ChangeValueOfDevice(HomidomServer,GelExterieurEtat,"false")
ComposantValueTest = "False"
End if
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("GelExterieur", ComposantValue, "Etat")
End If
If (EtatOut8Value <> ComposantValueTest) then
EcritureFichier ("GelExterieur", ComposantValue, "Etat")
End If


End Select
End Select

Loop

' Remise à zéro du composant TimerCompteur1 pour une plage de 30min.
If (TimerCompteur1Value.value >= "30") then Serveur.ChangeValueOfDevice(HomidomServer,TimerCompteur1,"0")
If (TimerCompteur2Value.value >= "6") then Serveur.ChangeValueOfDevice(HomidomServer,TimerCompteur2,"0")

' Set Serveur = Nothing
End Function
End Class
End Namespace
cirdec007
Membre Actif
 
Messages: 30
Inscription: 08 Sep 2015, 10:38


Retourner vers Scripts VB

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique