Resharperは私が気づいていなかった自分の.net構造体への変更を推奨しました。私は苦労してについてのMicrosoftの情報を見つけ出していますthis()構造体の初期化子。C#Struct this()イニシャライザ - メモリ、パフォーマンス、およびクリーン
私は値を渡している構造体上にコンストラクタを持っていますが、一度構造体が作成されると構造体のプロパティを読み込み専用にします。 Resharperは提案された方法により、コードをもっときれいに見えるようにします。
質問:
- メモリ:私は可能であれば余分なゴミの発生を回避したいです。私はこの()を使用して設定する前に、値の型を事前に初期化することがあります心配します。
- パフォーマンス:this()を使用すると、最初に構造体の値がデフォルトで初期化され、値が設定されることが心配です。不要な操作。それを避けるのがいいでしょう。
- 清潔度:明らかに、:this()を使用すると、構造体がよりクリーンになります。なぜ私たちはそれを使いたくないのですか?
例:
public struct MyContainer
{
public MyContainer(int myValue) : this()
{
MyValue = myValue;
}
public int MyValue { get; private set; }
}
public struct MyContainer2
{
private readonly int _myValue;
public MyContainer2(int myValue)
{
_myValue = myValue;
}
public int MyValue
{
get { return _myValue; }
}
}
あなたは、パフォーマンスと行くための正しいルートで少ない.NETガベージを最適化しようとしている場合は?コンパイルされても違いはありますか?
データ処理のために何百万もの構造体を作成しているとき、私はこれを盲目的に受け入れたくありません。それらは短命のコンテナオブジェクトなので、ネットのゴミとパフォーマンスの問題です。
私はリファクタリングを誤解していると思います:清潔さは 'this()'呼び出しではなく自動プロパティから来ています。 – dasblinkenlight
@dasblinkenlight後者は前者を使うために必要な変更です。 – Servy
メモリ内の場所をゼロに設定してすぐに別の場所に設定すると、ゴミが生成されません。この変更の結果として*できない新しいオブジェクトインスタンスを作成することで、ガベージが作成されます。 – Servy