El objetivo de AddMemoryPressure es indicar al recolector de elementos no utilizados que hay una gran cantidad de memoria asignada con ese objeto. Si no está administrado, el recolector de basura no lo sabe; solo la porción administrada. Dado que la porción administrada es relativamente pequeña, el GC puede dejarla pasar para la recolección de basura varias veces, esencialmente desperdiciando memoria que podría necesitar ser liberada.
Sí, todavía tiene que asignar manualmente y desasignar la memoria no administrada. No puedes escapar de eso. Simplemente usa AddMemoryPressure para asegurarse de que el GC sabe que está allí.
Editar:
Pues bien, en caso de que uno, yo podría hacerlo, pero había ninguna diferencia grande, como el GC no sería capaz de hacer una cosa sobre mi tipo , si entiendo esto correctamente: 1) Declararía mi variable, 8 bytes administrados, 2 MB de bytes no administrados. Entonces lo usaría, llamaré a eliminar, para que la memoria no administrada sea liberada. En este momento solo ocupará 8 bytes. Ahora, a mis ojos, haber llamado en el comienzo AddMemoryPressure y RemoveMemoryPressure al final no habría hecho nada diferente. ¿Qué me estoy equivocando? Perdón por ser tan molesto con esto. - Jorge Branco
Creo que veo su problema.
Sí, si puede garantizar que siempre llama al Dispose
, entonces sí, no necesita molestarse con AddMemoryPressure y RemoveMemoryPressure. No hay equivalencia, ya que la referencia todavía existe y el tipo nunca se recopilará.
Dicho esto, aún desea utilizar AddMemoryPressure y RemoveMemoryPressure, para mayor completitud. ¿Qué sucede si, por ejemplo, el usuario de su clase olvidó llamar a Dispose?En ese caso, suponiendo que implementó correctamente el patrón de eliminación, terminará recuperando los bytes no administrados en la finalización, es decir, cuando se recopila el objeto gestionado. En ese caso, desea que la presión de memoria permanezca activa, de modo que es más probable que se reclame el objeto.
Bueno, eso no respondió la pregunta, lol. –
Dije casi exactamente lo que dijo Steven Lyons, solo de una manera diferente. ¿Cómo no respondió la pregunta? – Randolpho
Bueno, en realidad lo volví a leer y edité mi publicación. –