Les types de référence ne créent pas d'objets en double lorsque vous les passez. Sous les couvertures, vous passez des pointeurs. Donc, si vous avez N objets, vous aurez N x mémoire par objet + la mémoire nécessaire pour référencer chaque objet. C'est indépendamment du conteneur de stockage pour ces références, dans votre cas, un dictionnaire. Vous encourez des frais de mémoire pour le dictionnaire, mais si vous créez un autre dictionnaire et y placez tous les mêmes objets, vous ne disposerez que de 2 coûts de mémoire du dictionnaire plus un ensemble d'objets en mémoire. C'est quand vous utilisez des types de référence.
MyObject object = new MyObject(); // one object created in memory
MyObject object2 = object; // still only one object created in memory, but we have two references now
Les types de valeur sont toujours uniques en mémoire. Donc, si vous créez un dictionnaire de System.Int32, puis créez un doublon du dictionnaire, vous aurez également une copie de chaque valeur dans le dictionnaire.
int myInt = 5; // one int created in memory
int myInt2 = myInt; // two ints have been created in memory
Donc, nous allons savoir ce que les morceaux de mémoire sont alloués pour certains scénarios:
// two value types
Dictionary<int, int> myDictionary1 =
1 x Dictionary
N x int <key>
N x int <value>
Dictionary<int, int> myDictionary1 +
Dictionary<int,int> myDictionary2 (clone of 1) =
2 x Dictionary
2N x int <key>
2N x int <value>
// reference types
Dictionary <string, MyObject> myDictionary3 =
1 x Dictionary
N x string Reference
N x string instance (if they are all unique)
N x Object Reference
N x Object instance (if they are all unique)
Dictionary <string, MyObject> myDictionary3 +
Dictionary <string, MyObject> MyDictionary4 (clone of 3) =
2 x Dictionary
2N x string reference
1N x string instance (if they are all unique)
2N x Object reference
1N x Object instance (if they are all unqiue)
vous êtes scénario:
Dictionary<int, MyObject> myDictionary5
1 X Dictionary
N X key
N X value reference
N X value object
Dictionary<int, MyObject> myDictionary5 +
Dictionary<int, MyObject> myDictionary6 (clone of 5) =
2 x Dictionary
2N x key
2N x value reference
1N x value objects
Je pense que vous vouliez dire Dictionnaire. La clé est le premier type, la valeur est le deuxième type. –
oui, c'est ce que je voulais dire merci – cab