Tengo una estructura con algunos campos. Uno de los campos es de tipo genérico. El tipo genérico podría ser ya sea un tipo de referencia o un tipo de valor.Forzar un tipo de valor (genérico) para que sea una referencia
Quiero forzar que se guarde como referencia internamente, para evitar que la estructura sea demasiado grande.
struct Foo<T>
{
T field; // should be a reference
}
Sé que podría utilizar object
o T[]
, pero ambos es incómoda. ¿No hay algo así como un tipo de referencia genérico?
struct Foo<T>
{
Reference<T> field;
}
Sí, claro, podría escribir la mía. Pero estoy tratando de evitar que
No entiendo cómo se resuelve el problema. Supongamos que S es un tipo de gran valor. Entonces Foo
es * del mismo tamaño * que S. Si el usuario está bien con el rendimiento de S, ¿por qué no se encontrarán también con el rendimiento de Foo? El boxeo S, ya sea que selecciones un objeto o una clase de boxeo personalizada, usará * más * espacio en general porque tendrás que tener espacio para la instancia de S * y * espacio para el cuadro. Boxing S usará * más * tiempo porque lleva tiempo guardar cajas y unbox S. –Y mantener S en un tipo de referencia agregará una presión considerable al recolector de basura si hay muchas de ellas. ¿Puede explicar por qué cree que se trata de algún tipo de victoria, porque me parece que es una situación mala, es decir, el costo de perforación de una gran estructura, mucho, mucho peor? –
@Eric: No quiero que la estructura se convierta en grande. las estructuras deben ser pequeñas en el uso de la memoria. Hay otros campos en esta estructura y ya está en el límite superior. Si T fuera un tipo de valor Guid o incluso mayor, la estructura resultante sería grande. –