Я декодирую сообщения из двоичного потока. Я создаю объекты сообщений различных типов в зависимости от того, какие сообщения поступили. Все они происходят от базового типа 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 какие-либо сходства.