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 :

Probleme de ressource système insufisante


Sujet :

VB.NET

  1. #1
    Membre actif
    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
    Points : 293
    Points
    293
    Par défaut Probleme de ressource système insufisante
    Bonjour à tous

    Depuis quelques semaines j'ai de petits problèmes de mise à jour dans ma base de donner

    j'ai un erreur toujours au même endroit. Dans les fait, avant d'inscrire un enregistrement dans la BD je vérifie si elle n'existe pas déjà le tout se déroule bien mais un moment donner ça bug, j'ai essayé plusieurs choses pour résoudre le problème mais rien ne marche. j'ai besoin de quelqu'un de plus chevronner (pas très dur à trouver )

    Je vous donne le plus d'info que je peux ... merci de vous pencher sur mon problème

    Histoire de voir le comportement de ma machine j'ai fait une petite routine pour tester

    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
    Private Sub TestTpmToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TestTpmToolStripMenuItem.Click
            Dim IntRou As Integer = 0
            'Faire une séquense de vérification de doublon pour l'ensemble des enregistrements inscrit dans la BD
            For Each Drw As DataRow In Form1._Ds.Tables("TblDonner").Rows
                IntRou = IntRou + 1
                Dim DatDon As Date = CDate(Drw.Item("DateDonner"))
                Dim SymbTmp As String = Drw.Item("Symbole").ToString
     
                Console.WriteLine(String.Format("{0} {1} {2} {3}", DatDon, SymbTmp, DoublonBDDonner(DatDon, SymbTmp), IntRou))
     
                Console.WriteLine("Memory used before collection: {0:N0}", GC.GetTotalMemory(False))
                GC.Collect()
                Console.WriteLine("Memory used before collection: {0:N0}", GC.GetTotalMemory(True))
                Console.WriteLine("")
            Next
     
        End Sub
     
    Function DoublonBDDonner(ByVal DateDon As Date, ByVal Symb As String) As Integer
            Dim Ad2 As AcceeDonnee
            Dim Rep As Integer
            'SELECT Count(TblDonner.Prix) AS CompteDePrix FROM TblDonner GROUP BY TblDonner.DateDonner, TblDonner.Symbole HAVING (((TblDonner.DateDonner)=#10/21/2013#) AND ((TblDonner.Symbole)="bnk"));
            Dim SQL As String = "SELECT Count(TblDonner.Prix) AS CompteDePrix FROM TblDonner GROUP BY TblDonner.DateDonner, TblDonner.Symbole HAVING (((TblDonner.DateDonner)=#" & DateDon & "#) AND ((TblDonner.Symbole)=""" & Symb & """));"
            Ad2 = New AcceeDonnee
            Rep = Ad2.FournirValeur(SQL)
            Ad2 = Nothing
            Return Rep
     
        End Function
    Dans une classe je fais

    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
    Function FournirValeur(ByVal SQL As String) As Integer
            Dim Int1 As Integer = 0
            Try
                Me.OuvrirConnexion()
                Dim Cmd As New OleDbCommand()
                With Cmd
                    .Connection = Me._cn
                    .CommandType = CommandType.Text
                    .CommandText = SQL
     
                End With
                Int1 = CType(Cmd.ExecuteScalar, Integer)
                Cmd = Nothing
                Return Int1
            Catch ex As Exception
                Console.WriteLine(ex.Message)
                Console.WriteLine(SQL)
                Throw New ApplicationException("La commande à échoué " & ex.Message)
            Finally
                Me.FermerConnection()
     
            End Try
        End Function
    Notez que j'utilise cette méthode depuis plusieurs mois. Voici le message d'erreur

    2014-06-05 00:00:00 DMN.PR.A-1189 1 5190
    Memory used before collection: 162*975*012
    Memory used before collection: 162*965*608


    Une exception de première chance de type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll
    Ressources système insuffisantes.
    SELECT Count(TblDonner.Prix) AS CompteDePrix FROM TblDonner GROUP BY TblDonner.DateDonner, TblDonner.Symbole HAVING (((TblDonner.DateDonner)=#2014-06-05#) AND ((TblDonner.Symbole)="DNA-1133"));
    Le programme '[4368] BourseV2.vshost.exe: Managé (v4.0.30319)' s'est arrêté avec le code -1 (0xffffffff).
    encore merci de votre soutien

    Mario

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    Une question, quelle est la taille du curseur que te ramène cette requette si tu l’exécute dans sql designer par exemple?

    Autre chose est ce que c'est la taille de l'emprunte mémoire de ton application qui explose, ou est ce le moteur d’exécution de ta bdd qui prend toute la ressource disponible (si tu ne lui limite pas la taille mémouire utilisable elle prendra toute la place disponible)?
    Si par exemple le fait d’exécuter cette requête fait que SQL server (ou ton sgbd) utilise toute ta mémoire, ton application se retrouvera sans ressource.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  3. #3
    Membre actif
    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
    Points : 293
    Points
    293
    Par défaut
    Merci Worm83

    Je sais pas comment récupérer la taille du curseur, selon ce que je lit sur le net ça rapport à mon instruction SQL je poursuit dans cette direction

    Pour ce qui est de la mémoire, la lecture de chaque passage de ma boucle ne la fait pas augmenter alors j'ai l'impression que le prob est bien au niveau du curseur.

    je ne trouve pas d'exemple pour connaitre la taille de mon curseur alors ... des indices seraient le bienvenues merci

    je poursuit ma recherche

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    En vitesse quelque conseil.

    Utiliser un bloc

    Using New connexion(connectionstring)
    connexion.Open

    Mes petites affaire en sql ...

    End Using

    J'ai remarqué que les connexion Access ont tendance à planter surtout lorsqu'on les utilise pour faire trop de requête à la suite (ou s'il en y en a trop d'ouverte en même temps). Donc je déconseille le bout de code foireux avec la connexion en tant que variable de classe (tu peux mettre la connectionstring en propriété si tu veux) ou de faire du parallélisme sur ce genre de code (au cas ou...).

    Utilisé des paramètres de requête au lieu de concaténer de la string SQL (Nom de Diu)

    Taille de curseur sur un Execute scalar qui renvoie en tout logique un resultat (ici un chiffre), ça me semble sacrément louche ?

    C'est une mauvaise idée de faire des requêtes en boucle (grosse perte de performance), Tu devrais normalement avoir une requête qui renvoie une table complète de (Date, Symbo, CntPrix) que tu stockes localement dans une datatable ou une liste d'objet. Ensuite tu utilise la table interne pour les prochaines recherches. Ca c'est encore à voir en fonction du reste de ton programme :-)

  5. #5
    Membre actif
    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
    Points : 293
    Points
    293
    Par défaut
    Merci beaucoup de vos précieux conseils

    je passe maintenant pas un datatable ...plus rapide et moins gourmant

    donc résolue

  6. #6
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Oui d'une manière générale il ne faut pas faire de boucle pour ramener les données, on ramène un segment entier de donnée.


    Et bien évidement comme le précise Sinople, une connexion ça s'ouvre, se ferme et se dispose.

    Tant mieux si ton problème est résolu.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

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

Discussions similaires

  1. Pas trop de ressources système pour un script windows (MS-DOS) ?
    Par ptiscab dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 13/03/2007, 13h16
  2. [ASE 12.0] : trop de ressources système
    Par sparcx5 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 25/01/2007, 15h47
  3. Ressources système insuffisantes
    Par tedparker dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2006, 11h56
  4. Probleme de ressources bundles dans un jar
    Par dideux dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2006, 18h57
  5. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35

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