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

C# Discussion :

[C#] Pourquoi ai-je une consommation de mémoire importante ?


Sujet :

C#

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Par défaut [C#] Pourquoi ai-je une consommation de mémoire importante ?
    Bonjour à tous,

    J'ai rencontré à la job une situation étrange que je ne sais pas expliquée: j'ai une séquence dans le programme qui consomme énormément de mémoire. Voici le code incriminé:

    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
     
    class Program
    {
            static void Main(string[] args)
            {
                const int NB_ELEMENTS = 100000;
     
                Vector Y = new Vector(NB_ELEMENTS,1.0);
     
                int i = 1;
                double h = 2.0;
     
                Vector u = new Vector();
     
                do
                {
                    u = (0.5 - Y) / h;
     
                    i++;
     
                } while (i <= NB_ELEMENTS);
     
                return;
            }
    }
    Le problème se situe à la ligne suivante:

    où Y et u sont des objets Vecteur. À chaque passage sur cette ligne, le programme consomme 2M de mémoire et elle apparait comme «perdue».

    Voici aussi le constructeur de la classe ainsi que l'implémentation de l'opérateur de soustraction.

    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
     
    public Vector(int nrows, int ncols)
    {
            _nbelems = nrows*ncols;
            _nrows = nrows;
            _ncols = ncols; 
            _pElements = new double[nrows,ncols];
    }
     
    public static Vector operator-(double lhs, Vector rhs)
    {
           Vector Res = new Vector(rhs.nrows, rhs.ncols);
           for (int i = 1; i <= rhs.nbelems; i++)
           {
                  Res[i] = lhs - rhs[i];
            }
     
            return Res;
    }
    Ci-joint une capture d'écran de la mémoire vive.

    Auriez-vous une idée de ce que j'ai fait de mauvais?

    Merci!

    Christophe.
    Images attachées Images attachées  

Discussions similaires

  1. [ADO.Net][C#] Pourquoi OracleConnection lève une exception ?
    Par meuledor dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/01/2006, 17h54
  2. Réponses: 2
    Dernier message: 26/10/2005, 11h44
  3. Réponses: 12
    Dernier message: 14/07/2005, 16h55
  4. Réponses: 9
    Dernier message: 31/05/2005, 10h05

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