Я не очень разбираюсь в vb и унаследовал приложение от предыдущего программиста. Меня попросили запустить анализ Visual Studio для кода, чтобы внести изменения, так как приложение, казалось, вызывало проблемы с памятью. Я получил множество сообщений об удалении объекта несколько раз, например
Предупреждение CA2202 Объект 'myConnection' может быть размещен более одного раза в методе xxx '. Во избежание генерации исключения System.ObjectDisposedException не следует вызывать метод Dispose более одного раза для объекта
Просто, оберните это в блок, который я думал. Затем я обнаружил, что myConnection использовался в try / catch
JumpUpAgain:
Try
myConnection.Open()
Catch ex As Exception
LogIt("EXCEPTION", "Connection Error: " & ex.Message)
myConnection.Close()
SqlConnection.ClearAllPools()
ConnectionString = Nothing
conn = Nothing
MySQLCmd = Nothing
myConnection = Nothing
Threading.Thread.Sleep(3000)
If ErrorLoopCounter = 5 Then
LogItDetail("Exception", "Database Connection Process failed after 5 re-tries")
If Not FailedFiles.Contains(InputFileName) Then FailedFiles.Add(InputFileName)
LogItDetail("DEBUG", "Added file to Failed Files for email")
FileProcessFailed = True
Throw
Else
ErrorLoopCounter += 1
End If
GoTo JumpUpAgain
End Try
И объект myConnection требуется в следующем коде.
Я уберу myConnection = Nothing из перехвата, но если я добавлю использование / конец с использованием вне этого блока try / catch, будет ли оно корректно удалено, если приложение выполнит команду Throw?