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é:
Le problème se situe à la ligne suivante:
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; } }
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».
Code : Sélectionner tout - Visualiser dans une fenêtre à part u = (0.5 - Y) / h;
Voici aussi le constructeur de la classe ainsi que l'implémentation de l'opérateur de soustraction.
Ci-joint une capture d'écran de la mémoire vive.
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; }
Auriez-vous une idée de ce que j'ai fait de mauvais?
Merci!
Christophe.
Partager