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 :

Mémoire insuffisante ligne 1


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 105
    Par défaut Mémoire insuffisante ligne 1
    Bonjour,

    Comme disait un ancien président, "les enm%*^ca volent en escadrilles" ! (message posté hier pour autre chose)

    J'ai des boucles qui chargent des informations dans des tableaux à 3 dimensions. Ces infos contiennent des emails et des ID qui me permettent ensuite de faire des actions (abo/desabo) sur une plateforme via un webbrowser.

    Lorsqu'il y a un certain nombre de ligne et au bout d'un certain temps, j'ai un message d'erreur "mémoire insuffisante en ligne 1".

    - Est-ce un problème de mémoire vive propre à l'ordinateur ?
    - Existe-t-il une solution pour "vider" la mémoire de temps en temps au cours de l’exécution ?

    Merci à vous !

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    On peut parfois ôter de la mémoire des objets devenus inutiles. Mais il s'agit donc d'objets instanciés par ton programme et la programmation de leur destruction aurait dû être prévue. Mais on là dans l'hypothétique ...

    Ne peux-tu poster un extrait de ton code, avec notamment la "fameuse" ligne 1, mais aussi les codes de déclaration des tableaux et leurs boucles d'affectations (peut-être dépasses-tu seulement une des limites déclarées d'un tableau) ?

    Question subsidiaire : ne peux-tu exécuter le même code sur un autre ordi, avec la même quantité de mémoire ou plus, et vérifier si l'erreur survient toujours au même endroit, lors de la même opération, l'affectation de la même valeur dans le même emplacement du tableau ?

    ...

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Moi ce que j'en dis, c'est que les tableaux en trois dimensions bouffent énormément de mémoire, qu'ils sont une héritage archaïque du vieux BASIC, que VB n'a jamais été une lumière quand il s'agit de gérer la mémoire et qu'il y a probablement plus efficace que les tableaux en VB.net.

    À vrai dire, utiliser encore les tableaux revient à faire du VB6 en VB.net et c'est se priver des évolutions et des améliorations apportées au langage depuis pratiquement 20 ans.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 105
    Par défaut
    Bonjour

    @ Phil Rob : Il n'y a pas de dépassement de taille des tableaux. Le problème ne survient pas toujours au même moment et il s'agit d'une erreur qu'il me semble avoir déjà rencontré sur une macro excel. Il n'y a absolument rien de spécial en ligne 1, ce n'est pas un plantage du logiciel mais un message système. J'ai testé sur un autre ordinateur la même "série" et elle est passée; certainement donc un problème de mémoire lié à l'ordinateur lui-même. Je vais fouiller ça.


    @ clementmarcotte : au risque de paraitre un "ovni", je ne suis même pas au courant qu'il est possible de faire autrement qu'avec des tableaux de variables multidimensionnels... J'ai un ami qui développait sur VB6 et qui m'a initié au code il y a quelques années, j'ai juste continué à utiliser et développé ce qu'il avait commencé donc votre analyse est tout à fait plausible "faire du VB6 sur VBNET". Mais du coup comment stocker des données si ce n'est en passant par des variables à plusieurs dimensions ? (grosse curiosité maintenant !)

    Bonne soirée

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par alberto314 Voir le message
    Bonjour

    Mais du coup comment stocker des données si ce n'est en passant par des variables à plusieurs dimensions ? (grosse curiosité maintenant !)

    Bonne soirée
    En mémoire vive:

    Contenir des données

    DataSet (Un conteneur de tables)
    DataTable Une table de données qui peut être alimentée d'une source de données externe (Access, Excel, SQlServer et d'autres) ou même manuellement dans le programme.

    Trie et afficher des données:

    DataGridView
    DataView
    BindingSourse

    Exemples de code

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    Je suis assez étonné de ton conseil pour une fois clementmarcotte.

    Les tableaux font entièrement partie du framework et sont bien plus léger qu'un datatable/dataset. Je pensais qu'au mieux tu allais conseiller une collection.
    Une collection n'est avantageuse par rapport à un tableau que si on doit ajouter ou retirer des éléments à la collection car redimensionner un tableau est plus lent qu'une collection.

    Pour les datatable, ils sont bien plus lourd qu'un tableau et ne permettent pas de mettre des objets venant de classe perso.
    Ils sont pas mal pour rapatrier des données d'une BD et gérer le mode déconnecté mais dans le cas de alberto314 nous ne savons pas quelle est la source de donnée et de toute façon ils ne feraient qu'alourdir la mémoire.

    Ce qu'il faudrait vraiment savoir, c'est combien d'élément sont stocké et quel est le poids de chaque élément. As-tu vraiment besoin de les garder tous en mémoire? Avant que l'application ne plante, combien fait le programme en mémoire?

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    +1
    quand tu regardes le code source du framework les tableaux sont utilisés aussi
    c'est ce qu'il y a de plus performant
    c'est juste que les collections sont beaucoup plus pratique
    (et j'irais jamais proposer d'utiliser datatable/dataset ...)


    Citation Envoyé par alberto314 Voir le message
    au risque de paraitre un "ovni", je ne suis même pas au courant qu'il est possible de faire autrement qu'avec des tableaux de variables multidimensionnels…
    étrange d'utiliser un outil sans s'être renseigné sur comment on doit s'en servir …
    vb.net et vb6 n'ont rien à voir
    certes ils ont les même mots clés du genre if for etc... mais ca s'arrête là et ca ne s'utilise pas du tout de la même manière
    vb.net est un langage orienté objet alors que vb6 était un langage orienté spaghetti (ou procédural je sais plus)
    on peut donc faire des collections de classe qui ont des propriétés, ces propriétés pouvant être aussi des collections
    et ca fait du code lisible du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each dest in InBox.Mails.Last.Destinaire
      dim s as string = dest.Nom & " " & dest.AdresseMail
    Next
    ' tu parlais de mail j'ai essayé de trouver un exemple qui s'y rapporte
    ' et ca reste plus lisible que Mails[Mails.Count-1][3][0]
    et ca c'est la base du langage, le truc qu'on apprend en 1er ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Talend : mémoire insuffisante pour traiter 7 millions de lignes
    Par Edna24 dans le forum Exécution et industrialisation
    Réponses: 9
    Dernier message: 11/06/2009, 13h42
  2. Mémoire insuffisante
    Par cjo dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/11/2005, 12h14
  3. message d'erreur "Mémoire insuffisante"
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2005, 14h41
  4. Mémoire insuffisante
    Par lenouvo dans le forum MFC
    Réponses: 6
    Dernier message: 31/08/2005, 09h14
  5. Mémoire insuffisante sous Dos
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 20/09/2003, 10h35

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