Mientras leía el código fuente de Roslyn en GitHub , noté la clase ObjectPool<T> muy utilizada. Se utiliza para reducir la sobrecarga de memoria.
Internamente utiliza una matriz para almacenar los objetos agrupados. Lo que no entiendo es por qué usa una estructura privada llamada Element que contiene un solo campo de tipo T como elemento de matriz, en lugar de solo usar T
¿Esto se debe a la preocupación por el rendimiento? ¿Sobrecarga de memoria?
Puede ser por razones de rendimiento. Ver este artículo de Jon Skeet .
Para resumir, las matrices de tipo de valor son invariantes en C#, lo que significa que el tiempo de ejecución puede evitar realizar una comprobación de compatibilidad al almacenar elementos en la matriz. En el artículo, el Sr. Skeet usa una estructura contenedora similar a la que describió y muestra una mejora en el rendimiento de escritura en la matriz.