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 d'outOfMemoryException dans le traitement d'un xml


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut Problème d'outOfMemoryException dans le traitement d'un xml
    Bonjour à tous,

    je débute en vb.net et j'ai un problème d'outOfMemoryException que je n'arrive pas à résoudre.

    Voilà, j'ai fait un petit programme pour traiter un fichier xml.
    Dans un premier temps, il ouvre mon fichier xml (qui fait environ 50 Mo) dans une textbox invisible.
    Je copie ensuite le texte dans une autre textbox visible cette fois-ci dans laquelle je vais faire mon traitement (ceci afin que le fichier d'origine ne soit pas modifié).
    Je fais un premier traitement de remplacement de valeur d'une balise et je sauvegarde mes modifs dans un fichier temporaire; je vide ma textbox visible et je recopie le données de ce fichier temporaire dedans afin que l'utilisateur vérifie les modifs :

    Code vb : 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
        Private Sub Button3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim element As Xml.XmlNodeList
            Dim noeud As Xml.XmlNode
            Dim TextXML As Xml.XmlDocument = New Xml.XmlDocument
            Dim a As Integer = 0
            TextXML.LoadXml(TextBox2.Text)
            element = TextXML.DocumentElement.GetElementsByTagName("ThemeValueColumnType")
     
            For Each noeud In element
                element(a).InnerText = "1"
                a = a + 1
            Next
     
            TextXML.Save("C:\Temp\tempxml.mwx")
            TextBox2.Clear()
            TextBox2.Text = My.Computer.FileSystem.ReadAllText("C:\Temp\tempxml.mwx")
     
        End Sub


    puis je fais un find/replace automatique dans ces données modifiées. et c'est que ça plante, que je fasse le traitement directement dans le textbox ou dans un autre fichier temporaire :


    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            Dim myText As String = File.ReadAllText("C:\Temp\tempxml.mwx")
            Dim myTextReplace As String = myText.Replace(ComboBox1.Text, ComboBox2.Text)
            File.WriteAllText("C:\Temp\tempxmlreplace.mwx", myTextReplace) 'pour réecrire le texte dans un autre fichier.
            TextBox2.Clear()
            TextBox2.Text = My.Computer.FileSystem.ReadAllText("C:\Temp\tempxmlreplace.mwx")
            'TextBox2.Text = Replace(TextBox2.Text, ComboBox1.Text, ComboBox2.Text)
        End Sub

    j'ai cherché toute la matinée sans réussir à résoudre le problème.
    Quelqu'un pourrait-il m'aider svp ?

    Merci d'avance pour vos réponses

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Ce serait bien de dire sur quelle ligne ça plante exactement mais je ne comprends pas ce que font les comboBox1 et ComboBox2 dans ton Replace.
    Si en plus tu peux mettre ton code entre les balises Code (Le bouton # au dessus de la zone d'édition du message), ce serait parfait

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    ok, désolé.

    alors ça plantait au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim myText As String = File.ReadAllText("C:\Temp\tempxml.mwx")
    Je viens de modifier le fait de dans un premier temps, j'ouvre mon fichier xml dans une textbox invisible : je l'ouvre directement dans le textbox visible.
    et maintenant ça plante au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim myTextReplace As String = myText.Replace(ComboBox1.Text, ComboBox2.Text)
    je ne comprend toujours pas

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    les combobox sont là pour que l'utilisateur puisse choisir quel terme il veut remplacer et par quoi...

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    ci-dessous mon code :

    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
     
    Private Sub Button3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim element As Xml.XmlNodeList
    Dim noeud As Xml.XmlNode
    Dim TextXML As Xml.XmlDocument = New Xml.XmlDocument
    Dim a As Integer = 0
    TextXML.LoadXml(TextBox2.Text)
    element = TextXML.DocumentElement.GetElementsByTagName("ThemeValueColumnType")
     
    For Each noeud In element
    element(a).InnerText = "1"
    a = a + 1
    Next
     
    TextXML.Save("C:\Temp\tempxml.mwx")
    TextBox2.Clear()
    TextBox2.Text = My.Computer.FileSystem.ReadAllText("C:\Temp\tempxml.mwx")
     
    End Sub
     
    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    Dim myText As String = File.ReadAllText("C:\Temp\tempxml.mwx")
    Dim myTextReplace As String = myText.Replace(ComboBox1.Text, ComboBox2.Text)
    File.WriteAllText("C:\Temp\tempxmlreplace.mwx", myTextReplace) 'pour réecrire le texte dans un autre fichier.
    TextBox2.Clear()
    TextBox2.Text = My.Computer.FileSystem.ReadAllText("C:\Temp\tempxmlreplace.mwx")
    'TextBox2.Text = Replace(TextBox2.Text, ComboBox1.Text, ComboBox2.Text)
    End Sub

    désolé, pour les extraits de réponse. Je n'ai pas l'habitude.
    Merci pour votre aide

  6. #6
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    L'exception OutOfMemoryException signifie qu'il n'y a pas assez de mémoire pour stocker l'intégralité de ton fichier en mémoire.
    Voir LA

    Sinon, juste pour info, tu n'es pas obligé de recréer un message à chaque fois si ton dernier n'est pas complet, tu peux l'éditer

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

Discussions similaires

  1. [AJAX] Gestion mémoire dans un traitement
    Par Psycadi dans le forum AJAX
    Réponses: 1
    Dernier message: 02/09/2010, 14h58
  2. problème d'encodage dans print et sur fichier xml
    Par paissad dans le forum Langage
    Réponses: 8
    Dernier message: 05/05/2010, 13h52
  3. [SSAS]Problème dans le traitement d'un cube
    Par Safaritn dans le forum SSAS
    Réponses: 2
    Dernier message: 27/09/2008, 09h35
  4. problème dans le traitement des couleurs
    Par sironimo dans le forum Graphisme
    Réponses: 33
    Dernier message: 22/12/2005, 13h52
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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