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 de StackOverflowException


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut Problème de StackOverflowException
    Bonjour,

    Je développe un Batch de traitement de grand volume de données, extraction de données d'un fichier csv puis l'intégration en base. Tout marche bien, mais au retour quand je liber la mémoire (.dispose ...etc) J'ai un retourne de StackOverflowException
    Un Bug dû au appel récursif des fonction système tel que dispose fait sauter le traitement ;-((

    Avez vous une idée pour résoudre le Bug???
    Merci par avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    Sans code, personne ne pourra t'apporter de réponses à ton problème (sauf madame Irma ) !

    Tu dis que le stack overflow intervient en libérant de la mémoire ? C'est bizarre car il devrait survenir lorsqu'il y a un trop grand nombre d'appel à ta fonction récursive.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut Ci-après le code
    Effectivement, ci-après le code. En fait l'objet tmp_ficInter1 contient plus de 25000 éléments voir dès fois plus de 100000. la transation se fait très bien, mais quand il arrive au tmp_ficInter1.dispose() là sa saut systématiquement ;-((???!!!!!
    Merci,



    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
    Public Function Sychonise_fic_inter( ByRef tmp_ficInter1 As OfficeElevage.FcovFicInter ) As Int32
                Dim conn As Ofival.Designs.Connection.GenericConnection = Ofival.Designs.Connection.GenericConnection.Instance
    
    
                Dim t2 As IDbTransaction
                traitement.Connection = conn
                tmp_ficInter1.Connection = conn
               
                conn.Open()
                t = conn.BeginTransaction(False)
                Try
    
                   
                    t2 = conn.BeginTransaction(False)
                    traitement.launchIntegrationInterSigal(id_traitement)
                    t2.Commit()
                    Return id_traitement
                Catch ex As Exception
                    Try
                 
                        If Not IsNothing(t2) Then
                            t2.Rollback()
                        End If
    
                    Catch
                    End Try
                    ' Throw ex
                    Dim msg As String = String.Format("Erreur pendant {0} : {1}", "Erreur lors de Synchronisation des Interventions Sigal", ex.ToString)
                    Throw New Exception(msg, ex)
                Finally
                    If Not IsNothing(conn) Then
                        conn.Close()
                        conn.Dispose()
                        conn = Nothing
                        GC.Collect()
                    End If
                   
    
                    If Not IsNothing(tmp_ficInter1) Then
                        tmp_ficInter1.Dispose()
                        tmp_ficInter1 = Nothing
                        GC.Collect()
                    End If
                    
                End Try
    
            End Function

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    OK, merci.

    Tu as une balise code (le #) pour rendre ton code plus lisible (tout comme les indentations).

    Je ne vois rien de récursif dans ta méthode.

    Par contre, tu cherches à libérer le paramètre de ta fonction qui est en ByRef, c'est possiblement la source du problème (je ne vois pas l'intérêt de libérer ce paramètre dans ta fonction, peut être dans la méthode qui appelle cette fonction à la limite !)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
      If Not IsNothing(tmp_ficInter1) Then
                        tmp_ficInter1.Dispose()
                        tmp_ficInter1 = Nothing
                        GC.Collect()
                    End If
    l'intérêt est majeur, car mon programme est un traitemnt Batch qui fait le maping de données XML vers une BD relationnelle. donc j'ai besoin de mémoire.
    en fait, tmp_ficInter1 contient entre (25000 et 120000) enregistrements donc, quand tu fais un dispose il boucle sur toutes les occurrence de cet objet pour faire un release resources....
    Je vais essayé t as proposition faire le dispose la méthodes qui appelle la fonction...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut suite
    Même problème ;-(

Discussions similaires

  1. problème avec System.StackOverflowException
    Par Mario Rousson dans le forum VB.NET
    Réponses: 10
    Dernier message: 04/11/2011, 21h32
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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