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 :

problème avec System.StackOverflowException


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut problème avec System.StackOverflowException
    Bonjour,

    j'aimerais savoir pourquoi j'ai ce message d'erreur dans ma procédure et comment l'éviter.

    L'exception System.StackOverflowException n'a pas été gérée
    InnerException:
    J'ai une première boucle de 0 à 4000 et pour chaque boucle j'ai une procédeure comprend une deuxième boucle qui vérifie les doublons pour 150 enregistrements environ.

    L'erreur apparaît lorsque la première boucle arrive au niveau 1700 environ.

    merci

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Cette exception e lève généralement quand tu surcharge la mémoire de ton Pc, en gros, quand il à plus de place.
    StackOverflowException est levé pour les erreurs de dépassement de capacité de la pile d'exécution, généralement en cas de récurrence très profonde ou non limitée.
    La il se retrouve à se demander ou placer les nouveaux éléments, puis plante.

    Si je comprend bien ce que tu me décris, ta boucle plante après avoir vérifié 1700 fois 150 enregistrement?
    Ca dépend beaucoup de la façon dont tu gère la vérifiation, mais je pense que tu devrais la revoir de façon à décharger la mémoire de ton pc.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    ok c'est ce que je pensais, je dois oublier de détruire certains objets à chaque boucle j'imagine.

    ça arrive toujour lors de la vérification d'un doublon ma function est la suivante.

    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
    Function DoublonEsTuLa(ByVal SQL As String) As OleDbDataReader
            Dim dr As OleDbDataReader
            Try
                Me.OuvrirConnection()
                Dim Cmd As New OleDbCommand
                With Cmd
                    .Connection = Me._cn
                    .CommandType = CommandType.Text
                    .CommandText = SQL
                End With
                'Obtention des enregistrements
                dr = Cmd.ExecuteReader()
                Return dr
            Catch ex As Exception
                Me.FermerConnection()
                Throw New ApplicationException("La Commande à échoué", ex)
            Finally
           End Try
        End Function
    je vais repasser mes procédures pour voir ce qui me gruge

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    stackoverflow n'est pas un problème de mémoire, pour la mémoire c'est outofmemoryexception

    stackoverflow veut dire que tu as dépassé la taille maxi de la pile
    quand tu appelles une méthode, elle est mise sur la pile, si elle en appelle une autre, elle est mise sur la pile aussi, et à la sortie d'une méthode ca dépile

    si tu as une méthode A qui appelle la méthode A, alors celle ci appellera A, et ce une infinité de fois, arrivé à quelques milliers, le stackoverflow sera déclenché


    donc tu as surement un problème de récursivité sans fin
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    j'ai repasser tout mon code et je voix pas ou ça cloche alors j'aimerais le vérifier avec vous si je peut le me le permettre

    PS. Soyez indulgent je suis amateur et c'est possible que mon code soit pas très évolué

    premièrement à l'ouverture de la page je charge les infos de ma bd

    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
    Private Sub MajAnaliTechnique_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            LVSetup()
            DGVSetup()
            Dim SqlSymb As String = "SELECT TblSymbole.Symbole, TblSymbole.[Actif] FROM TblSymbole WHERE (((TblSymbole.[Actif])=False));"
            Dr = Ad.FournirDataReader(SqlSymb)
            While Dr.Read
                Dim symbtemp As String = CStr(Dr("Symbole"))
                ArListSymb.Add(symbtemp)
                TSCBoxSymb.Items.Add(symbtemp)
            End While
            Ad.FermerConnection()
            Dr.Close()
            NbrAct = ArListSymb.Count
            TSLabCompteur.Text = NbrAvencement.ToString & " / " & NbrAct.ToString
            TSCBoxSymb.Sorted = True
            ArListSymb.Sort()
        End Sub
    Je charge mes infos dans un arraylist et dans un combobox car je peut executer mes procédures de deux façons.

    Jusque la pas de problème il me semble.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Pour démarrer l'execution de ma procédure d'analyse de chaque symbole avec mon arraylist je procède comme suit...et c'est peut-être la que ça cloche.

    j'ai un bouton pour faire démarrer le tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TSButAvancer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSButAvancer.Click
            If NbrAvencement > ArListSymb.Count Then
                Exit Sub
            End If
            TSLabCompteur.Text = (NbrAvencement + 1).ToString & " / " & NbrAct.ToString
            TSTBoxSymb.Text = ArListSymb(NbrAvencement)
            NbrAvencement = NbrAvencement + 1
        End Sub
    Ensuite dans la methode textchange du textbox je fais ma procédure et à la fin je redemande un nouvel item du arraylist

    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
    Private Sub TSTBoxSymb_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TSTBoxSymb.TextChanged
            DGVDonnee.Rows.Clear()
            ListVAnalyseTech.Items.Clear()
            'Requête de récupération des informations à analyser
            Dim SSQLSect As String = "SELECT TblDonneesTest.DateDonnees, TblDonneesTest.Symbole, TblDonneesTest.Prix, TblDonneesTest.Volume FROM TblDonneesTest WHERE (((TblDonneesTest.Symbole)=""" & TSTBoxSymb.Text & """));"
            Dr = Ad.FournirDataReader(SSQLSect)
            Dim Prix As Double
            Dim Volume As Integer
            Dim DateDon As Date
            Try
                While Dr.Read
                    If Not Dr.IsDBNull(Dr.GetOrdinal("DateDonnees")) Then
                        DateDon = CDate(Dr("DateDonnees"))
                    Else
                    DateDon = Nothing
                    End If
                    symbo = CStr(Dr("Symbole"))
                    If Not Dr.IsDBNull(Dr.GetOrdinal("Prix")) Then
                        Prix = CDbl(Dr("Prix"))
                    Else
                    Prix = Nothing
                    End If
                    If Not Dr.IsDBNull(Dr.GetOrdinal("Volume")) Then
                        Volume = CInt(Dr("Volume"))
                    Else
                    Volume = Nothing
                    End If
                    DGVDonnee.Rows.Add(DateDon.ToShortDateString, Prix.ToString("F"), Volume.ToString)
                End While
            Finally
                Dr.Close()
                Ad.FermerConnection()
            End Try
            My.Application.DoEvents()
            Dim maxligne As Integer = 0
            If DGVDonnee.RowCount > 2 Then
                maxligne = DGVDonnee.RowCount
                If Doubrech(CDate(DGVDonnee.Item(0, DGVDonnee.RowCount - 2).Value), symbo) = False Then
                    AnaPage()
                End If
            End If
            NbrAvencement = NbrAvencement + 1
            TSLabCompteur.Text = (NbrAvencement).ToString & " / " & NbrAct.ToString
            TSTBoxSymb.Text = ArListSymb(NbrAvencement)
        End Sub
    c'est peut-être ici que ça cloche, lorque je change l'information dans un textbox à partir de la procédure textchange

    quand dite vous?

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

Discussions similaires

  1. Problème avec system()
    Par cmoibal dans le forum Bibliothèque standard
    Réponses: 1
    Dernier message: 08/01/2008, 19h36
  2. Problème avec System.CodeDom
    Par spidey87 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/11/2007, 09h45
  3. Problème avec System.Data.Odbc
    Par Chii-san dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/08/2007, 14h41
  4. [Système] Problème avec system()
    Par bartrik dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2007, 10h46
  5. problème avec System.management
    Par arabimouh dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 24/05/2007, 16h50

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