Bonjour à tous !
J'ai une petite question. J'ai cherché dans le bouquin de Jeffrey Richter, mais je n'ai pas trouvé.
J'ai deux méthodes statistiques qui font toutes les deux la même chose, soit compter le nombre de bits à 1 dans un nombre. Il y a une version lente et l'autre optimisé. La version optimisée contient un tableau d'information précalculé. Ce tableau fait 256 octets en mémoire et je me demande tout simplement si .NET alloue cette mémoire à chaque appel de la méthode ou bien l'alloue une fois et joue avec...
J'ai tenté de la déclarer CONST ou READONLY, mais sans succès... J'ai tenté de découvrir la réponse à l'aide d'un profiler, mais je n'ai pas trouvé. En passant, si vous en avez un bon, laisser moi le savoir!
Merci !
Martin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static int NbBitsOn(int n) { const int NbBits = sizeof(int) * 8; int nbBitsOn = 0; for (int i = 0; i < NbBits; i++) { nbBitsOn += n & 0x1; n >>= 1; } return nbBitsOn; }
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 public static int NbBitsOnOpt(int n) { byte[] PreComputedNbBitsOn = new byte[] {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; const int NbBits = sizeof(int); int nbBitsOn = 0; for (int i = 0; i < NbBits; i++) { nbBitsOn += PreComputedNbBitsOn[n & 0xFF]; n >>= 8; } return nbBitsOn; }
Partager