Estoy decodificando mensajes de comunicaciones de una secuencia binaria. Creo objetos de mensaje de diferentes tipos según los mensajes que hayan llegado. Todos derivan de un tipo base CommsMessage
. Todo bien y elegante.Costo de rendimiento de las comparaciones de tipos
En otra parte de mi código necesito reaccionar a estos mensajes, así que necesito saber qué tipo de mensaje es.
Actualmente estoy haciendo:
void ProcessIncomingMessage(CommsMessage msg)
{
if (msg is MessageType1)
return ProcessMessageType1(msg as MessageType1);
if (msg is MessageType2)
return ProcessMessageType2(msg as MessageType2);
//etc
}
Me pregunto lo que el costo de rendimiento de la comparación de este tipo son, y si debería incluir una propiedad MessageType
en la clase base en su lugar. Entonces podría hacer:
void ProcessIncomingMessage(CommsMessage msg)
{
switch (msg.MessageType)
{
case MessageType.Type1: return ProcessMessageType1(msg as MessageType1);
case MessageType.Type2: return ProcessMessageType2(msg as MessageType2);
//etc
}
}
Sí, esta es la optimización prematura, y probablemente estoy preocuparse por detalles insignificantes, pero yo soy el tipo de codificador que le gusta saber lo que está pasando debajo de las mantas y así fue preguntándose las diferencias de rendimiento entre los dos. Supongo que tengo un prejuicio contra las comparaciones de tipos de mi fondo de C++ donde RTTI introdujo una sobrecarga, y me preguntaba si .Net tenía alguna similitud.
posible duplicado de [C# 'es' el rendimiento del operador] (http://stackoverflow.com/questions/686412/c-sharp-is-operator-performance) –