I am working on a desktop application in VB.net 2005. The application contains a timer with an interval of 1 min. Each time the timer ticks, a set of functions gets executed, mostly database related. Initially the application runs fine. In processes(Task manager) the cpu usage goes to 100% every time the timer is invoked. But the timespan is around 1 sec(negligible). However as the time passes and after around 20 hours the time span of timer_tick increases to something like 20-30 secs. In this period cpu usage is 100% and the application does not responds. Gradually the time span of timer_tick increases to 1 min and the cpu uses gets stuck to 100% and the application does not responds. All objects are properly disposed. Moreover, this issue is with pentium 4 processors. The application runs fine on core 2 duo.
The timer contains 4 functions... I am adding few of those functions..
Public Sub SetNotes()
Dim dtOld As DataTable
Dim dtNew As DataTable
Dim oApptTasks As New AppointmentsAndTasks
dtOld = oApptTasks.PopulateAllTasks ' get the source table
dtNew = dtOld.Clone ' make new table ad clone of old table
If btnShowNotes.Text = "Hide Notes" Then
For Each item As System.Data.DataRow In dtOld.Rows
If Not IsDBNull(item("Notes")) Then
If item("Notes") <> "" Then ' add only if not null and not blank
item("Task") = item("Task") & vbCrLf & item("Notes") ' concatenate the notes field
End If
End If
dtNew.ImportRow(item) ' import modified row to new table
Next
grdcTask.DataSource = SetAssignedTo(dtNew) ' set the datasource
grdcTask.DataSource = SetAssignedFrom(grdcTask.DataSource) ' set the datasource
repMemoNotes.LinesCount = 0 ' adjust the height of custom field
Else
grdcTask.DataSource = SetAssignedTo(dtOld) ' set the datasource
grdcTask.DataSource = SetAssignedFrom(grdcTask.DataSource) ' set the datasource
End If
End Sub
Now this is one of the four functions called by timer...which uses the following code to fetch data from db.
Using conn As New SqlConnection(glbSqlConnString)
Try
conn.Open()
Dim dbDataAdapter As New SqlDataAdapter(oStrQueryBuilder.ToString, conn)
dbDataAdapter.Fill(dbDataTable)
Catch ex As Exception
EventLog.WriteLog("App", ex.ToString, EventLogEntryType.Error)
Finally
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
End Using
Many Select, Update and delete queries are performed in the timer.
This problem occurs when I am using around 7000 records in database. With less records the problem does not occurs. So, can the SQL queries be the culprit for this.
Can you please suggest what could be the culprit in memory leak?
Looking forward for help. Thanks in advance.