Я написал программу мониторинга URL в vb с помощью .net 4.0. В основном он устанавливает таймер проверяет url каждые 60 минут с помощью htpwebreques / httpwebresponse и отправляет по электронной почте, если url не работает. Однако память, используемая приложением, продолжает увеличиваться каждый раз, когда проверяется url. Это, очевидно, в конечном итоге вызовет проблему, так как приложение предназначено для постоянного мониторинга веб-сайт для доступности и мониторинга машины в конечном итоге закончатся ресурсы.
Код для моей процедуры CheckURL ниже. Любой совет очень ценится, спасибо заранее.
Private Sub checkURL()
Timer1.Stop()
Dim wReq As HttpWebRequest
Dim wResp As HttpWebResponse ' WebResponse
wReq = HttpWebRequest.Create(url)
wReq.Method = "HEAD"
Try
wResp = wReq.GetResponse()
If wResp.StatusCode = 200 Then
txtResponse.Text = wResp.StatusCode & ": " & wResp.StatusDescription & vbNewLine & "The " & siteName & " is up"
'Only send success results if specified
If sendOnFailure = False Then
sendResults = True
End If
Else txtResponse.Text = "There may be a problem with the " & siteName & vbNewLine & "Please verify manually that it is operational." & vbNewLine & "The response received was:" & vbNewLine & "Status Code: " & wResp.StatusCode & " - " & wResp.StatusDescription
sendResults = True
End If
wResp.Close()
wResp = Nothing
wReq = Nothing
Catch ex As Exception
txtResponse.Text = "There may be a problem with the " & siteName & vbNewLine & "The error returned was:" & vbNewLine & ex.ToString
sendResults = True
End Try
txtLastCheck.Text = Now.ToString("d MMM yyyy HH:mm")
setNextCheck()
End Sub
Во-первых , вы должны использовать опцию Strict On, которая покажет вам, где у вас есть несоответствия типа переменной и может даже предложить корректировки для вас, например, см., где
DirectCast
оператор используется в следующем коде.Во-вторых,
HttpWebResponse
есть.Dispose()
метод, поэтому вы должны вызвать его, когда вы закончите его использовать, или, как указал Цагглер, вы можете использоватьUsing
, чтобы убедиться, что неуправляемые ресурсы очищены должным образом, Таким образом, удаляя утечку памяти, которую вы беспокоитесь. Обратите внимание, что в коде могут быть другие подобные проблемы, которые мы не видим.Вы не должны устанавливать вещи, чтобы
Nothing
в попытке избавиться от них — делать так возится с мусоросборником и ничего не делает для обеспечения их чистой утилизации.