¿Es posible establecer un tamaño mínimo de un montón de generación 0 en .NET?.NET generation 0 montón
Tengo una continuación de sistuation. Tengo una función que asigna alrededor de 20-30 MB de objetos de 1KB, hace algo con ellos y finaliza, dejando todos los objetos asignados para ser GC-ed. Ahora, en el Monitor de rendimiento, puedo ver que el tamaño de almacenamiento de la generación 0 es de 5-6 MB, que no es suficiente para aceptar todos los 20-30 MB de objetos que necesito. Cuando empiezo a asignar, en algún momento gen0 GC comienza a ejecutarse, y dado que se necesitan todos los objetos, los promueve a gen1. La próxima vez que GC comience a funcionar, estos objetos serán promovidos en gen2. Entonces, finalmente, alrededor de 15 MB de mis objetos terminan en el gen2 montón. Estos son, según mi lógica, objetos temporales que de ninguna manera deberían terminar en gen2 montón. Creo que el problema está en el tamaño del tamaño del montón gen0. Pero no estoy seguro. Sé que en Java existe la posibilidad de establecer un tamaño mínimo de los montones generacionales. ¿Hay alguna manera en .NET?
Los objetos mayores de 85K generalmente no son elegibles para la recolección, excepto en Gen2. Si una referencia a un nuevo objeto se almacena dentro de un objeto más grande que 85K, a menos que se destruya la referencia dentro del objeto grande, el nuevo objeto subirá a Gen2 antes de que sea elegible para la recopilación, incluso si el objeto se desenraiza antes de eso. – supercat