Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
bluedead
Newbie
Newbie

Anmeldedatum: 25.03.2011
Beiträge: 3

Download mit Backgroundworker sehr langsam :(
Verfasst am: 25.03.2011, 01:11

Code:

Imports System.IO
Imports System.Net
Imports System.ComponentModel



Public Class Form1
    Dim watch As Long
    Private th As BackgroundWorker
    Dim speed1 As Long = 0
    Dim speed2 As Long = 0
    Dim Temp As String = Environment.GetEnvironmentVariable("Temp")
    Dim Patcherver As String = "1.0"
    Dim MyPfad As String = Path.GetDirectoryName(Application.ExecutablePath)



    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        End
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call DownloadItem("http://****-********.**/************/test/filesizes.txt", "filesizes.txt", Temp)
        Me.ProgressBar1.Value = 0
        th.RunWorkerAsync()
        Timer1.Enabled = True
    End Sub


    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Process.Start(MyPfad & "\**** ******** Config.exe")
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Form2.Show()
        th = New BackgroundWorker
        AddHandler th.DoWork, AddressOf th_DoWork
        AddHandler th.RunWorkerCompleted, AddressOf th_Completed
        AddHandler th.ProgressChanged, AddressOf th_ProgressChanged
        th.WorkerReportsProgress = True
        th.WorkerSupportsCancellation = True

        Call DownloadItem("http://****-********.**/************/test/data.txt", "data.txt", Temp)
        Call Newsleser()
        Dim client As New Net.WebClient
        Dim ServerPatcherVer As String = client.DownloadString("http://****-********.**/************/patcher/patcherver.ini")
        If Not Patcherver = ServerPatcherVer Then
            MsgBox("Neuer Patcher wird heruntengeladen!", MsgBoxStyle.Information, "Veralteter Patcher")
            IO.File.WriteAllBytes(MyPfad & "\PatcherUpdate.exe", My.Resources.PatcherUpdate)
            Process.Start(MyPfad & "\PatcherUpdate.exe")
            End
        Else
            If File.Exists(MyPfad & "\PatcherUpdate.exe") Then
                File.Delete(MyPfad & "\PatcherUpdate.exe")
            End If
        End If
    End Sub



    Private Sub DownloadItem(ByVal sURL As String, _
   ByVal strFile As String, ByVal strFolder As String)

        Dim webreq As HttpWebRequest
        Dim webresp As HttpWebResponse
        Dim bReader As BinaryReader
        Dim bWriter As BinaryWriter
        Dim stream As FileStream
        Dim buffer() As Byte = New Byte(1024) {}
        Dim bytesRead As Integer

        ' Fortschritt zunächst auf 0% setzen
        Me.ProgressBar1.Value = 0

        Try
            ' Datei-Download via HTTP "anfordern"
            webreq = HttpWebRequest.Create(sURL)
            webresp = webreq.GetResponse

            ' Download-Größe
            Me.ProgressBar1.Maximum = webresp.ContentLength

            ' lokale Datei öffnen
            stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
            bReader = New BinaryReader(webresp.GetResponseStream)
            bWriter = New BinaryWriter(stream)

            ' Datei blockweise downloaden und lokal speichern
            Do
                bytesRead = bReader.Read(buffer, 0, 1024)
                bWriter.Write(buffer, 0, bytesRead)
                ProgressBar1.Value += bytesRead
                ProgressBar1.Update()
                If watch = 0 Then
                    speed1 = ProgressBar1.Value
                    watch = 1
                End If
                If watch = 1 Then
                    speed2 = ProgressBar1.Value - speed1
                    watch = 0
                    Me.Text = "**** ******** Patcher @ " & strFile & " " & Math.Round((speed1 / 1024), 2) & "kb von " & Math.Round(Me.ProgressBar1.Maximum / 1024, 2) & "kb"
                End If
            Loop Until bytesRead = 0

            ' alle Dateien schließen
            bWriter.Close()
            bReader.Close()
            stream.Close()

        Catch ex As Exception
            ' Bei Fehler...
            MessageBox.Show("Fehler: " & vbCrLf & ex.Message, _
              "Fehler", MessageBoxButtons.OK, _
              MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End Try
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Process.Start("http://****-********.**")
    End Sub


    Private Sub th_doWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        Dim File(307) As String
        Dim Size(307) As String
        Dim LocalSize As String
        Dim strTeile(1) As String
        Dim i As Integer
        Dim fs As IO.FileStream = New IO.FileStream( _
              Temp & "\filesizes.txt", IO.FileMode.Open, _
              IO.FileAccess.Read)
        Dim w As IO.StreamReader = New IO.StreamReader(fs)
        Dim aktuelleDatei As String
        If Not Directory.Exists(MyPfad & "\BGM") Then
            Directory.CreateDirectory(MyPfad & "\BGM")
        End If
        If Not Directory.Exists(MyPfad & "\lib") Then
            Directory.CreateDirectory(MyPfad & "\lib")
        End If
        If Not Directory.Exists(MyPfad & "\mark") Then
            Directory.CreateDirectory(MyPfad & "\mark")
        End If
        If Not Directory.Exists(MyPfad & "\miles") Then
            Directory.CreateDirectory(MyPfad & "\miles")
        End If
        If Not Directory.Exists(MyPfad & "\pack") Then
            Directory.CreateDirectory(MyPfad & "\pack")
        End If
        If Not Directory.Exists(MyPfad & "\upload") Then
            Directory.CreateDirectory(MyPfad & "\upload")
        End If


        For i = 1 To 307
            strTeile = w.ReadLine.Split("=")
            File(i) = strTeile(0)
            Size(i) = strTeile(1)
            aktuelleDatei = MyPfad & "\" & File(i)
            Me.ProgressBar2.Maximum = 307
            Me.ProgressBar2.Value = i
            Dim vorhanden As Boolean = My.Computer.FileSystem.GetFileInfo(aktuelleDatei).Exists()
            If vorhanden = True Then
                LocalSize = My.Computer.FileSystem.GetFileInfo(MyPfad & "\" & File(i)).Length
            End If
            If vorhanden = False Or Not Size(i) = LocalSize Then
                Call DownloadItem("http://****-********.**/************/patcher/" & File(i), File(i), MyPfad & "\")
            End If
        Next
        Process.Start(MyPfad & "\**** ******** Client.exe")

    End Sub

    Private Sub th_Completed(ByVal sender As Object, _
  ByVal e As RunWorkerCompletedEventArgs)

        Dim strFinished As String = String.Empty

        If e.Cancelled Then
            strFinished = "Operation Cancelled"
        ElseIf e.Error IsNot Nothing Then
            strFinished = "Operation Error " & e.Error.Message
        Else
            strFinished = "Operation Sucessfull"
        End If
    End Sub

    Private Sub th_ProgressChanged(ByVal sender As Object, _
  ByVal e As ProgressChangedEventArgs)

        Try
        Catch ex As Exception
        End Try
    End Sub
End Class


Mein Problem ist, das der Download der einzelnen Dateien mit dem Backgroundworker nur max. 10KBit schnell ist, wenn ich das Projekt aber ohne umsetze lade ich mit 2,8MBit herunter aber die GUI hängt sich augenscheinlich auf.

Wo könnte mein Fehler sein?

Immer offen für Verbesserungsvorschläge.

LG Bluedead
 
bluedead
Newbie
Newbie

Anmeldedatum: 25.03.2011
Beiträge: 3


Verfasst am: 25.03.2011, 06:34

Fehler gefunden ^^

Code:

        Dim buffer() As Byte = New Byte(1024) {}
        Dim bytesRead As Integer
        Dim Prozent As Double
        Dim GesamtProzent As Double

        ' Fortschritt zunächst auf 0% setzen
        Me.ProgressBar1.Value = 0

        Try
            ' Datei-Download via HTTP "anfordern"
            webreq = HttpWebRequest.Create(sURL)
            webresp = webreq.GetResponse

            ' Download-Größe
            Me.ProgressBar1.Maximum = webresp.ContentLength

            ' lokale Datei öffnen
            stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
            bReader = New BinaryReader(webresp.GetResponseStream)
            bWriter = New BinaryWriter(stream)

            ' Datei blockweise downloaden und lokal speichern
            Do
                bytesRead = bReader.Read(buffer, 0, 1024)





wird zu:



        Dim buffer() As Byte = New Byte(73232) {}
        Dim bytesRead As Integer
        Dim Prozent As Double
        Dim GesamtProzent As Double

        ' Fortschritt zunächst auf 0% setzen
        Me.ProgressBar1.Value = 0

        Try
            ' Datei-Download via HTTP "anfordern"
            webreq = HttpWebRequest.Create(sURL)
            webresp = webreq.GetResponse

            ' Download-Größe
            Me.ProgressBar1.Maximum = webresp.ContentLength

            ' lokale Datei öffnen
            stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
            bReader = New BinaryReader(webresp.GetResponseStream)
            bWriter = New BinaryWriter(stream)

            ' Datei blockweise downloaden und lokal speichern
            Do
                bytesRead = bReader.Read(buffer, 0, 73232)

und schon zieht er wieder mit Voll-Last auf der Leitung Smile
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 565


Verfasst am: 25.03.2011, 10:39

ah
aja ich hab 4kb als buffer
wusste gar nicht dass man so groß gestalten kann

naja ist vl aus der vb6 zeit
 
bluedead
Newbie
Newbie

Anmeldedatum: 25.03.2011
Beiträge: 3


Verfasst am: 25.03.2011, 14:17


ich habs auch einfach mal ausprobiert ^^ und hat geklappt und lädt nun mit vollen 2,8MBit Smile
und da ich zum Großteil mit dem Patcher große Dateien runterlade, die ca. 100MB+ sind, ist es ja relativ ^^
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: backgroundworker, langsam

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Visual Basic Download ? 1999 03.05.2011, 08:38
Keine neuen Beiträge Api Download in Prozent + Kb anzeige + Progrezzbar 1462 21.10.2007, 14:03
Keine neuen Beiträge Download 1487 30.08.2007, 16:45
Keine neuen Beiträge Download mit Internet Explorer Object 1028 18.08.2008, 20:00
Keine neuen Beiträge Visual Basic 6 download 4326 26.05.2007, 12:51
 


[ Time: 0.2329s ][ Queries: 89 (0.1509s) ][ GZIP on - Debug on ]