私はバイナリストリームから通信メッセージをデコードしています。どのようなメッセージが到着したかによって、さまざまな種類のメッセージオブジェクトを作成します。それらはすべて基底型CommsMessage
から派生しています。すべての罰金とダンディー。タイプ比較のパフォーマンスコスト
私のコードのどこかで、私はこれらのメッセージに反応する必要があるので、どのタイプのメッセージであるかを知る必要があります。
は、現在、私がやっている:
void ProcessIncomingMessage(CommsMessage msg)
{
if (msg is MessageType1)
return ProcessMessageType1(msg as MessageType1);
if (msg is MessageType2)
return ProcessMessageType2(msg as MessageType2);
//etc
}
私は、これらのタイプを比較するパフォーマンスコストが何であるか疑問に思って、私は代わりに、基本クラスでMessageType
プロパティを含めるかどうか。そして、私が行うことができます:
void ProcessIncomingMessage(CommsMessage msg)
{
switch (msg.MessageType)
{
case MessageType.Type1: return ProcessMessageType1(msg as MessageType1);
case MessageType.Type2: return ProcessMessageType2(msg as MessageType2);
//etc
}
}
をはい、これは時期尚早な最適化である、と私はおそらく枝葉末節の上に心配だけど、私はカバーの下に何が起こっているのかを知るのが好きコーダの一種だとそうでした両者のパフォーマンスの違いが不思議です。 RTTIがオーバーヘッドを導入した私のC++バックグラウンドからの型比較に対して偏見があると思うし、.Netに類似点があるのかどうか疑問に思っただけです。
可能重複あなたの説明については(http://stackoverflow.com/questions/686412/c-sharp-is-operator-performance) –