私は持っていDictionary<int, Product>
ます。同じ製品が複数のキーに追加された場合、そのオブジェクトの新しいインスタンスがキーごとに保存されますか? それとも、元のオブジェクトへの参照ですか?
このコレクションは非常に大きく、各製品には 1 ~ 10 個のキーがあります。私の主な関心事はメモリ割り当てです。
私は持っていDictionary<int, Product>
ます。同じ製品が複数のキーに追加された場合、そのオブジェクトの新しいインスタンスがキーごとに保存されますか? それとも、元のオブジェクトへの参照ですか?
このコレクションは非常に大きく、各製品には 1 ~ 10 個のキーがあります。私の主な関心事はメモリ割り当てです。
Product が参照型 (構造体ではなくクラス) の場合、参照のみが格納されます。
いいえ、元のオブジェクトへの同じ参照を使用する必要があります。
ただし、ディクショナリがシリアル化/逆シリアル化された場合にどのように動作するかは完全にはわかりません。
は、渡したキーの値のDictionary
コピーを保存します。コンテナーが格納しようとした変数よりも長く存続する可能性があるため、任意の値への参照を格納することはできません。
さて、他の人が言ったように、値の型が参照型の場合、変数の値は単なる参照であるため、変数への参照のコピーを保存しているだけです。ディクショナリの値の Type が値型の場合、実際の値がコピーされます。
参照型は常に参照として保存されます。あなたがあなたのタイプにどのような「クローン」ロジックを意図しているかを推測する人は誰もいません。コピーが必要な場合は、コンテナーに配置したり、他の関数に渡したりする前に、独自に作成する必要があります。
関数に ref として渡されない限り、値の型はコピーされます (単純にバイト表現のコピーが作成されますが、すべての参照値は参照のままです)。コンテナの場合はコピーになりますが。それらの参照型ラッパーを作成しない限り。