Стоимость производительности при сравнении типов

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

6
задан GazTheDestroyer 20 January 2012 в 09:21
поделиться