Повисает прога по прошествии времени, откл. сет. кабель - ок

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Повисает прога по прошествии времени, откл. сет. кабель - ок

Сообщение Maitris » 07.01.2007 (Вс) 15:14

Браузер, загружает, парсит, HttpWebRequest.
Две сотни загрузок примерно - прога и винда дружно повисают, при попытке запуска Taskman'а ничего не происходит, только слышно системный звук "Critical".
Отключаю сетевой кабель (постоянное подключение, dsl) - секунд 20 и по волшебству висло исчезает.
Подозреваю, что при загрузке что-либо не закрываю.

Код: Выделить всё
Dim Data As String
        Dim strTemp As String
        Dim objResponse As WebResponse

        Try
            Dim objRequest As HttpWebRequest = System.Net.HttpWebRequest.Create(argURL)
            objRequest.Timeout = intTimeoutvalue
            objRequest.KeepAlive = True
            If boolSenduseragent Then objRequest.UserAgent = strUseragentvalue
            objResponse = objRequest.GetResponse
            If objResponse.ContentType = "text/vnd.wap.wml;charset=utf-8" Then boolConnectionpage = True Else boolConnectionpage = False
            Dim sr As StreamReader = New StreamReader(objResponse.GetResponseStream(), enco)
            Data = sr.ReadToEnd()
            sr.Close()
            objResponse.Close()
            objResponse.GetResponseStream.Close()
            objRequest.GetResponse.Close()
            objRequest.GetRequestStream.Close()
            '#Размер контента. Два варианта - Content Length и длина строки
            If Not objResponse.ContentLength = -1 Then Panel3.Text = objResponse.ContentLength.ToString & " Bytes" Else Panel3.Text = Data.Length.ToString & " Bytes"

            '#Ловушка для сетевых ошибок
        Catch we As WebException
            tmrLoading.Stop()
            strLastErrDescription = we.Message
            Panel4.Text = vbNullString
            strStatusBarText = "Ошибка HTTP"
            Panel1.Text = strStatusBarText
                Exit Sub
        End Try
----

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 08.01.2007 (Пн) 8:33

1. Одного objResponse.Close() достаточно. Он уже сам поток внутри себя закрывает.

Код: Выделить всё
Public Overrides Sub Close()
      If Logging.On Then
            Logging.Enter(Logging.Web, Me, "Close", "")
      End If
      If Not Me.m_disposed Then
            Me.m_disposed = True
            Dim stream1 As Stream = Me.m_ConnectStream
            Dim ex1 As ICloseEx = TryCast(stream1,ICloseEx)
            If (Not ex1 Is Nothing) Then
                  ex1.CloseEx(CloseExState.Normal)
            ElseIf (Not stream1 Is Nothing) Then
                  stream1.Close()
            End If
      End If
      If Logging.On Then
            Logging.Exit(Logging.Web, Me, "Close", "")
      End If
End Sub


2. If Not objResponse.ContentLength = -1 Then Panel3.Text = objResponse.ContentLength.ToString & " Bytes" Else Panel3.Text = Data.Length.ToString & " Bytes"

Вы же уже закрыли objResponse? Используйте только Data.Length.

3. В обработчике WebException нужно закрывать все открытые объекты. Включая objResponse, objRequest и т.п. Скорее всего тут программа и валится, от недостатка ресурсов, утекающих после исключения.

4. Может быть, на всякий случай, еще добавить обработчик Exception? Поскольку может быть другое исключение, кроме WebException - нехватка пямяти, например.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 08.01.2007 (Пн) 10:36

В том то и дело, что обычно никаких ошибок не бывает, обработчик не выполняется, а система валится.
Там еще потоки, их же не нужно завершать помимо самопроизвольного выхода через End Sub/Exit Sub?
----


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107

    TopList