Dekoduje wiadomości komunikaty ze strumienia binarnego. Tworzę obiekty wiadomości o różnych typach w zależności od nadejścia wiadomości. Wszystkie pochodzą od podstawowego typu CommsMessage
. Wszystko w porządku i dandy.Koszt wydajności porównań typów
Gdzie indziej w moim kodzie muszę reagować na te wiadomości, więc muszę wiedzieć, jaki typ wiadomości jest.
Obecnie robie:
void ProcessIncomingMessage(CommsMessage msg)
{
if (msg is MessageType1)
return ProcessMessageType1(msg as MessageType1);
if (msg is MessageType2)
return ProcessMessageType2(msg as MessageType2);
//etc
}
Zastanawiam się co koszt wydajność porównywania tych typów są i czy powinienem to właściwość w klasie bazowej MessageType
zamiast. Wtedy mógłbym zrobić:
void ProcessIncomingMessage(CommsMessage msg)
{
switch (msg.MessageType)
{
case MessageType.Type1: return ProcessMessageType1(msg as MessageType1);
case MessageType.Type2: return ProcessMessageType2(msg as MessageType2);
//etc
}
}
Tak, to jest przedwczesna optymalizacja, a ja chyba martwić się nieistotnych szczegółów, ale jestem typem kodera, który lubi wiedzieć, co się dzieje pod kołdrą i tak było zastanawia się różnice w wydajności między nimi. Chyba mam uprzedzenia przeciwko porównaniom typów z mojego tła C++, gdzie RTTI wprowadził obciążenie i zastanawiałem się, czy .Net ma jakiekolwiek podobieństwa.
możliwe duplikat [C# 'jest' wydajność operatora] (http://stackoverflow.com/questions/686412/c-sharp-is-operator-performance) –