Estoy a punto de escribir un conjunto de métodos en una aplicación de servidor que toma los mensajes recibidos del socket TCP, los codifica/decodifica, y los encripta/descifra.System.Reflection vs Generics - performance
mensajes Teniendo en cuenta se definen como tipos especiales, cada uno con su propio conjunto de propiedades y longitud total, tengo que optar por una de las siguientes soluciones: 1. métodos hacen que utilizan los genéricos, tales como Encode<T>(...) where T : IMessage
y luego implementar codificador/decodificador para cada tipo de mensaje y tiene ResolveEncoder<T>
que elegiría el codificador para el mensaje deseado o 2. Realice un método que utilice cualquier tipo de mensaje, siempre que implemente IMessage
, como Encode(IMessage message)
, y use System.Reflection para determinar todo Necesito saber sobre eso.
Estoy más interesado en hacer la solución n. ° 2, ya que hace que mi código sea 30 veces más pequeño. Sin embargo, me preocupa si el reflejo constante de las propiedades afectará el rendimiento. Ahora que tengo un tiempo limitado para terminar el proyecto, realmente no puedo "experimentar".
Agradecería cualquier experiencia personal o vínculos con los puntos de referencia sobre cómo el rendimiento cae con cualquiera de las soluciones.
La reflexión definitivamente disminuirá el rendimiento. Publique su código genérico para ver si tal vez se puede reducir de una manera que no haya pensado, que será más tolerable. – SimpleVar
No optimice prematuramente. Sí, la reflexión es más lenta que el código nativo, pero si no es el cuello de botella REAL, entonces es irrelevante. Es posible utilizar Reflection with Generics en algunos escenarios para almacenar en caché los métodos reflejados en la primera ejecución para mejorar el rendimiento. – cfeduke