IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Visual Basic 2010 : GetResponse trés lent et bloquage du Form pour ouverture d'un fichier php avec du xml [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut Visual Basic 2010 : GetResponse trés lent et bloquage du Form pour ouverture d'un fichier php avec du xml
    Bonjour,

    J'ai un problème de bloquage de fenêtre (form1) si on veut la déplacer aprés avoir cliqué sur Button1. J'ai remarqué que le problème ne vient pas de WebRequest mais plutot de request.GetResponse().


    Voici le code du form1 sur un Button1 qui provoque une lenteur voir même un freez de l'application tant qu'il a pas fini de télécharger le contenu du fichier php (je ne comprend pas d'où il pourrait venir le problème):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim encoding As New UTF8Encoding
            Dim response As WebResponse
            'dans connect.php c'est du xml
            Dim request As WebRequest = WebRequest.Create("http://www.site.org/connect.php")
            'Proxy Nothing pour gagner 10 secondes de lenteur du form
            request.Proxy = Nothing
     
            request.Method = "POST"
     
            Dim postData As String = "pseudo=admin&password=admin"        
            Dim byteArray As Byte() = encoding.GetBytes(postData)
     
            request.ContentType = "application/x-www-form-urlencoded"
     
            Dim dataStream As Stream = request.GetRequestStream()
     
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()
     
            response = request.GetResponse()
     
            dataStream = response.GetResponseStream()
            Dim reader As New StreamReader(dataStream)
     
            Dim xmlDocument As New Xml.XmlDocument()
            xmlDocument.LoadXml(reader.ReadToEnd())
            Dim value As String = xmlDocument.SelectSingleNode("test/ok").InnerText
            returnok = value
     
     
            Try
                Dim value2 As String = xmlDocument.SelectSingleNode("test/pseudo").InnerText
            Catch
            End Try
     
     
            If value = "HTTP_VALIDATOR" Then
                Form2.Show()
                Me.Hide()
            Else
                MsgBox("Mauvais login/mot de passe pour récuperer le contenu du xml")
            End If
     
     
            reader.Close()
            dataStream.Close()
            response.Close()
            response.GetResponseStream().Close()
     
        End Sub


    Le contenu du xml (il marche parfaitement bien et il récupere toutes les données que j'veux aprés 2 secondes de lenteur ):

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header("Cache-Control: no-store, no-cache, must-revalidate" );
    header("Cache-Control: GET-check=0, pre-check=0",false);
    header("Pragma: no-cache");
     
    require("la_bdd.php"); 
     
    $login 		= $_POST['pseudo']; //le login ou pseudo du membre
    $password 	= $_POST['password']; //le password du membre
     
    echo '<?xml version="1.0" encoding="utf-8"?>';
    ?>
    <test>
    <?php
    //ici il y a des While, mysql_select etc... mais comme c'est un test j'vais plutot mettre un fake:
     
    if ( $login == "admin" ) {
    ?>
    <ok>HTTP_VALIDATOR</ok>
    <?php
    }
    else {
    ?>
    <ok>HTTP_ERREUR</ok>
    <? } ?>
    </test>


    Est-ce que j'ai manqué un parametre pour éviter d'avoir une application qui freez au moment ou il récupere les données dans connect.php ?


    Merci de votre aide, salutations.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le faire sur un autre thread
    le thread principal sert en partie au refresh de l'interface
    tout traitement supérieur ou potentiellement supérieur à un quart de seconde devrait être déporté sur un autre thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    C'est quoi un thread ?

    WebRequest = un thread ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    google : thread vb.net

    ca devrait être un réflexe !
    de nos jours je ne comprends pas qu'on puisse poster "c'est quoi tel truc" sur un forum alors que google a la réponse à tout ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    ah oui en effet j'ai tapé "thread vb.net", c'est pas facile à comprendre.

    c'est des timers? est-ce que je pourrais avoir un exemple?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si tu as déjà fait du debug, en pas à pas tu vois une ligne jaune qui te montre la ligne en cours d'exécution

    si tu créé un nouveau thread, tu lui dit à quel sub commencer, et ca fait "une 2ème ligne jaune qui avance en même temps que la 1ère"

    ca permet donc d'éviter des blocages ou d'avoir plus de performances dans d'autres cas
    certaines applications peuvent avoir des centaines de threads en même temps


    pour commencer tu peux essayer le backgroundworker (qui est peut etre dans la boite à outils même)
    c'est une encapsulation de thread, ca permet normalement d'être utilisé facilement, car c'est basé sur des évènements
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Oui merci hier soir j'ai mis un "backgroundworker" c'est super top avec ça !!!

    Pour les "thread" j'apprendrais plutard.


    Salutations.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le backgroundworker créé un thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin de vos aides en visual basic 2010 remoting
    Par Chebil2006 dans le forum VB.NET
    Réponses: 0
    Dernier message: 14/02/2011, 21h35
  2. Création d'un nouveau projet avec Visual Basic 2010
    Par Francis649 dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/11/2010, 15h34
  3. Réponses: 3
    Dernier message: 29/09/2010, 10h28
  4. Livre Visual Basic 2010
    Par jolona dans le forum Livres
    Réponses: 8
    Dernier message: 03/07/2010, 16h17
  5. Réponses: 2
    Dernier message: 06/05/2010, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo