Tengo un ciclo en mi código que genera muchas matrices de bytes [] (alrededor de 1 a 2 MB cada una), las llena de datos y luego descarta la referencia. Por lo tanto, aunque la referencia solo se lleva a cabo durante un tiempo breve de , puedo ver que el conjunto de trabajo privado está creciendo.C#: ¿Se recogerá el GC si necesita memoria o dará una excepción de memoria insuficiente?
Ahora, si trato de asignar una matriz grande (~ 400 MB) después del bucle, ¿podría obtener una excepción de falta de memoria? ¿O la asignación obligará al GC a recoger los datos transitorios?
Gracias!
"La asignación de muchos objetos efímeros en el montón de objetos grandes es un patrón de asignación que el GC actual no maneja bien". ¿Te interesa ubicar tu fuente aquí? – Andy
@Andy Esa es mi propia experiencia. Tuve un proyecto que tomó varias capturas de pantalla en arreglos por segundo, y el rendimiento mejoró una vez que utilicé la agrupación para reutilizar las matrices. – CodesInChaos
Supongo que la razón es simplemente que es la gran cantidad de memoria por segundo que asigna que obliga a los GC todo el tiempo. Con los objetos grandes, asigna y descarta una gran cantidad de recuerdos incluso con relativamente pocas asignaciones por segundo. Y leí en alguna parte que los objetos LOH solo se recogen durante una colección Gen2, pero no estoy seguro de eso. – CodesInChaos