-2

私がこの設定をしたとしましょう:

class MainInfo
{
    public string path{get;set;}
    public string name{get;set;}
}

class MoreInfo : MainInfo
{
    // more variables and methods
}

そして、別のクラス内で、次のように宣言された MoreInfo クラスを取得しましたpublic MoreInfo info;

他のいくつかのメソッドでは、情報だけが必要です。今知りたいのは、他のメソッドに渡しMainInfoた場合にパフォーマンスの違いがあるかどうかです。必要な情報だけ?info MainInfo (MainInfo)infoinfo

ありがとう!

編集: または、 so のようなパラメーターを渡す場合MainInfo in = (MainInfo)info;。この3つに違いはありますか?

4

4 に答える 4

2

メソッドが を受け取る場合、MainInfo継承する型をキャストする必要はありません。直接渡すだけです。

パフォーマンスに関しては、これは問題になる可能性が高いものではありません。これはミクロからミクロの最適化であり、ほぼすべてのソフトウェアではるかに大きな最適化が可能になります。

于 2013-02-23T19:50:01.940 に答える
1

キャストにはいくらかのパフォーマンス コストがありますが、時期尚早の最適化は開発の悪魔です。

設計上の決定を行い、後で最適化を検討します。メソッドが情報全体にアクセスする必要があるため、より具体的なMoreInfoインスタンスが必要な場合は、ダウンキャストされたオブジェクトを に渡すのが良い選択かもしれませんMoreInfo。そうでない場合は、入力したオブジェクトそのままにしておきMainInfoます。

于 2013-02-23T19:50:21.010 に答える
1

キャスティングによる性能差はありますが、気になるほどで​​はないと思います。上記のクラスでテストを行い、キャストなしで 2218 ティック、キャストありで 135 ティックの結果を得ました。コンパイル時にキャストを処理するためだと思います。お役に立てれば!

System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
testmethod(info);
watch.Stop();
Console.WriteLine(watch.ElapsedTicks);  // 2218 ticks

watch.Restart();
testmethod((MainInfo)info);
watch.Stop();
Console.WriteLine(watch.ElapsedTicks); // 135 ticks
于 2013-02-23T20:04:16.200 に答える
0

まず、MainInfo オブジェクトを想定しているメソッドに MoreInfo オブジェクトを渡す場合、キャストする必要はありません。

第二に、どちらの方法でもポインターを渡すだけなので、同じ速度で実行されます。唯一のオーバーヘッドは、派生クラスの余分なデータのサイズによってポインターを調整する場所です。明らかに、それは実際には測定可能な速度の違いではありません。

于 2013-02-23T19:49:53.677 に答える