Я работаю над настольным приложением в VB.net 2005. Приложение содержит таймер с интервалом 1 мин.Каждый раз, когда срабатывает таймер, выполняется набор функций, в основном связанных с базой данных.Изначально приложение работает нормально.В процессах (диспетчер задач) загрузка процессора увеличивается до 100% при каждом вызове таймера.Но время составляет около 1 секунды (незначительно).Однако с течением времени и примерно через 20 часов промежуток времени timer_tick увеличивается примерно до 20-30 секунд.В этот период загрузка процессора составляет 100%, и приложение не отвечает.Постепенно промежуток времени timer_tick увеличивается до 1 минуты, а процессор использует 100%, а приложение не отвечает.Все объекты правильно расположены.Более того, эта проблема связана с процессорами Pentium 4.Приложение работает на Core 2 Duo.
Таймер содержит 4 функции ... Я добавляю несколько из этих функций ..
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
Теперь это одна из четырех функций называетсяby timer ... который использует следующий код для извлечения данных из базы данных.
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
Многие запросы на выбор, обновление и удаление выполняются в таймере.
Эта проблема возникает, когда яиспользуя около 7000 записей в базе данных.С меньшим количеством записей проблема не возникает.Итак, могут ли запросы SQL быть виновником этого.
Не могли бы вы подсказать, что может быть причиной утечки памяти?
Ждем помощи.Заранее спасибо.