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 :

Accumulation de processus Excel dans mon gestionnaire des taches.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut Accumulation de processus Excel dans mon gestionnaire des taches.
    Bonjour,

    J'ai une méthode qui importe des valeurs depuis Excel dans mon application.

    Quand je l'utilise, j'accumule des processus Excel dans mon gestionnaire des taches.

    Et tant que je ne les ferme pas manuellement, les fichiers en question restent "verrouillé pour modification"...donc accessibles seulement en lecture seule.

    Elle commence par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        xlapp = New excel.Application
     
                openfiledialog1.Filter = "Excel 2003 file|*.xls|Excel 2007-2010 file|*.xlsx"
                openfiledialog1.Title = "Import the geometry. Select a file"
     
                Call FillUpProgressBar(0.1) '                                                          Progressbar 10%
     
                openfiledialog1.ShowDialog()
                If openfiledialog1.FileName <> "" Then
     
                    xlWorkBook = xlapp.Workbooks.Open(openfiledialog1.FileName)
     
                    xlWorkSheet = CType(xlWorkBook.Worksheets(1), excel.Worksheet)

    et finit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    xlWorkBook.Close()
                    xlapp.Quit()
     
                    releaseObject(xlapp)
                    releaseObject(xlWorkBook)
                    releaseObject(xlWorkSheet)
     
                    GC.Collect()
    Que manque t il dans le code de fin?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu as vu cette question dans la FAQ ?

    En quoi consiste ta méthode releaseObject ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Je ne vais jamais dans le C#, j'ai dejà du mal avec VB.NET....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #Region "Realease Objects"
        Private Sub releaseObject(ByVal obj As Object)
            Try
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
                obj = Nothing
            Catch ex As Exception
                obj = Nothing
            Finally
                GC.Collect()
            End Try
        End Sub
    #End Region

    J'ai modifié ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     xlWorkBook.Close()
                    xlapp.Quit()
     
                    releaseObject(xlapp)
                    releaseObject(xlWorkBook)
                    releaseObject(xlWorkSheet)
     
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp)          System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook)       System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet)
     
                    GC.Collect()
                    GC.WaitForPendingFinalizers()
    Ai je encore besoin de releaseObject?

    Et dois je appliquer ces méthodes au WorkBook et WorkSheet?

    J'avoue utiliser ce code sans vraiment le comprendre...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Plusieurs problèmes :

    - ça ne sert à rien de refaire le ReleaseComObject, puisque tu l'as déjà fait dans releaseObject


    - dans releaseObject, ça ne sert à rien de mettre obj à Nothing, ça modifie seulement la valeur du paramètre et pas la variable dans la méthode appelante. Mets le paramètre en ByRef au lieu de ByVal, ou alors mets la valeur à Nothing dans la méthode appelante et non dans releaseObject


    - ne mets pas le GC.Collect dans releaseObject, ça provoque un cycle de GC à chaque appel, ce qui est très lourd. De toutes façons tu le fais déjà en dehors de releaseObject...

    A part ça je ne vois pas trop... où sont définies tes variables xlapp, xlWorkBook et xlWorkSheet ? Ce sont des variables locales ou des champs de ta classe ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    si c'est juste pour lire toutes les celulles je trouve OleDb plus facile et moins lourd

Discussions similaires

  1. incorporer des modèles de feuilles excel dans mon xla
    Par batou22003 dans le forum Excel
    Réponses: 2
    Dernier message: 12/10/2009, 15h15
  2. Taille mémoire utilisée dans le gestionnaire des taches windows
    Par thibal_kamehouse dans le forum Général Java
    Réponses: 2
    Dernier message: 13/02/2009, 16h53
  3. Tuer un processus Excel dans Access
    Par Jordmund dans le forum Access
    Réponses: 4
    Dernier message: 29/08/2006, 08h59
  4. Réponses: 3
    Dernier message: 11/05/2006, 16h24
  5. Réponses: 10
    Dernier message: 06/10/2005, 22h25

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