Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Creato Servizio...Cresce la memoria
venerdì 04 agosto 2006 - 15.28
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Marc1982
Profilo
| Newbie
34
messaggi | Data Invio:
ven 4 ago 2006 - 15:28
CIao a tutti,
partendo proprio dall'esempio che ho preso su questo sito ho creato un servizio che non fa altro che (OGNI MINUTO) connettersi ad un DB verificare se ci sono nuovi record rispetto i precedenti e se ci sono li prende e li mette in una matrice che mi servirà in serguito per fare altre operazioni.Il codice funziona benissimo il problema è che se vedo TASKMANAGER mi accorgo che dopo una serie di volte(minuti) che si esegue il programma aumenta la "memoria utilizzata" e visto che quest è un servizio e girera sempre se aumenta anche se non di molto dopo 1 mese che gira su un server probabilmente la memoria utilizzata non giustifica il servizio.
COME POSSO RISOLVERE IL PROBLEMA?? premetto che ho chiuso anche tutte le connessioni con i db.
POSTO SOTTO IL CODICE INCRIMINATO
GRAZIE MILLE
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
.---------------------------------------------------------------------------------------------------------------------
DICHIARO PRIMA L'OGGETTO DI TIPO TIMER E GLI IMPOSTO LINTERVALLO POI NELL'EVENTO START ABILITO L'OROLOGIO E RICHIAMO LA FUNZIONE AVVIO PROGRAMMA.
Private t As New System.Timers.Timer(60000)
Protected Overrides Sub OnStart(ByVal args() As String)
t.Enabled = True
AvvioProgramma()
AddHandler t.Elapsed, AddressOf TimerFired
End Sub
Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
t.Stop()
End Sub
Public Sub TimerFired(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
'scrivo nel file di log il controllo che esista il file o no
'writeTxtFile(blnCheckExists(strControlPath & strEndCodeFile).ToString())
AvvioProgramma()
End Sub
---------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------LA FUNZIONE AVVIO PROGRAMMA NON FA ALTRO CHE ATTRIBUIRE AD M(una matrice) CHE è STATA DICHIARATA FUORI UNA MATRICE DI RITORNO
Sub AvvioProgramma()
m = StringaAllarme(19248)
End Sub
---------------------------------------------------------------------------------------------------------------------
LA FUNZIONE STRINGAALLARME NON FA ALTRO CHE CONNETTERSI AL DB PREDERE IL NUMERO DEGLI ELEMENTI count E DICHIARARE UNA MATRICE E POPOLARE QUELLA MATRICE NELLA SEQUENZA CHE MI SERVE
Function StringaAllarme(ByVal UltimoVisto As Integer) As String(,)
Dim NumeroElementi As Integer
Dim cn As OleDbConnection = ConnessioneDb("LOG_IMPORT.mdb", True)
'---Conto il numeor di elementi Nuovi-----------------------------
Dim sqlCount As String = "Select Count(*)as Nelementi From LOG Where prog>" & UltimoVisto & " and msg<>'' and periferico<>8000"
Dim cmdcount As New OleDbCommand(sqlCount, cn)
Dim r As OleDbDataReader
Try
r = cmdcount.ExecuteReader
r.Read()
NumeroElementi = r("Nelementi")
cmdcount.Dispose()
r.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
'--------------------------------------------------------------------
'---Qui Ciclo i risultati e li inserisco nella matrice da far tornare
Dim MatMsg(NumeroElementi, 9) As String
'1="data"
'2="Ora"
'3="Utente"
'4="Formato di Comunicazione"
'5="allarme=1 3=Ripristino"
'6="Codice evento"
'7="area o partizione"
'8="nr zona"
'9="PROG---CAMPO CHE STA NEL DB ED é IL CONTATORE"
Dim sql As String = "Select * From LOG where prog>" & UltimoVisto & " and msg<>'' and periferico<>8000"
Dim cmd As New OleDbCommand(sql, cn)
Dim x As Integer = 0
cmd.CommandText = sql
cmd.Connection = cn
Try
r = cmd.ExecuteReader
While r.Read
'Console.WriteLine(r("data"))
MatMsg(x, 1) = r("data")
MatMsg(x, 2) = r("ora")
MatMsg(x, 9) = r("Prog")
If Len(r("msg")) > 0 Then
MatMsg(x, 3) = Mid(r("msg"), 1, 4)
MatMsg(x, 4) = Mid(r("msg"), 5, 2)
MatMsg(x, 5) = Mid(r("msg"), 7, 1)
MatMsg(x, 6) = Mid(r("msg"), 8, 3)
MatMsg(x, 7) = Mid(r("msg"), 11, 2)
MatMsg(x, 8) = Mid(r("msg"), 13, 3)
End If
x = x + 1
End While
cmd.Dispose()
r.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
cn.Close()
Return MatMsg
MatMsg = Nothing
End Function
----------------------------------------------------------------------------------------------------------------------------------------
CHE COSA SBAGLIO NON DISTRUGGO QUALCOSA CHE RIMANE IN MEMORIA???
aiutatemi.
GRAZIE MARCO
filippo.monti
Profilo
| Junior Member
145
messaggi | Data Invio:
lun 7 ago 2006 - 16:29
Oltre a fare .dispose sui vari oggetti ti consiglierei di impostare a nothing i vari oggetti
Per esempio dopo
cn.dispose
fai anche
cn = nothing
Penso che il problema risieda sul garbage collector di .NET in quanto le connessioni al DB non vengono subito rilasciate
Ciao
Filippo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !