2010-05-14 21 views
7

En another questionStephen C, dice:¿Costo para GC de usar referencias débiles en C#?

Una segunda preocupación es que hay los gastos generales de tiempo de ejecución con el uso débiles referencias. Los costos obvios son los de creación de referencias débiles y llamando conseguirlos. Un costo menos obvio es que se necesita realizar un trabajo adicional significativo cada vez que se ejecuta el GC .

¿Cuál es exactamente el costo para el GC de una referencia débil? ¿Qué trabajo adicional necesita hacer, y qué tan grande es eso? Puedo hacer algunas conjeturas, pero estoy interesado en la mecánica real.

Respuesta

3

Por favor, consulte el artículo de Jeffrey Richter sobre Memory Management in .NET, debe aclarar un poco las cosas.

+2

+1 buen artículo. Por lo general, la sobrecarga de las referencias débiles es solo cuando tiene muchas referencias débiles porque el GC tiene que verificar si el objetivo de referencia débil se va a limpiar, si ese es el caso, configure el objetivo de referencia débil para nulo. En cualquier caso, me resulta extraño si alguien tiene tantas referencias débiles en su aplicación. Generalmente no necesitas ninguno. – Stormenet

+0

@Stormenet Bueno, usando ['ConditionalWeakTable (T)'] (https://msdn.microsoft.com/en-us/library/dd287757 (v = vs.110) .aspx) para virar los metadatos en objetos arbitrarios sin tener preocuparse por limpiar las entradas en su tabla de metadatos cuando esos objetos arbitrarios se acumulan basura puede ser bastante útil a veces. Dependiendo de lo que estés haciendo, me imagino que sería bastante fácil crear * muchos * de ellos. – binki

+0

enlace roto/abajo – springy76

Cuestiones relacionadas