【发布时间】:2012-02-14 21:11:45
【问题描述】:
我正在从二进制流中解码通信消息。我根据到达的消息创建不同类型的消息对象。它们都派生自基本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
}
}
是的,这是过早的优化,我可能会担心无关紧要的细节,但我是那种喜欢了解幕后情况的编码人员,因此想知道两者之间的性能差异。我想我对 C++ 背景的类型比较有偏见,因为 RTTI 引入了开销,只是想知道 .Net 是否有任何相似之处。
【问题讨论】:
标签: c# performance types