El otro día estaba investigando una fuga de memoria que aumentaba la aplicación de ~ 50MB a ~ 130MB en menos de dos minutos. Resulta que el problema fue con la clase ConcurrentQueue. Internamente, la clase almacena una lista vinculada de matrices. Cuando un artículo se retira de la Cocurrencia Concurrente, el índice en la matriz se topa, pero el elemento permanece en la matriz (es decir, no está configurado como nulo). El nodo de matriz completo se descarta después de suficientes enqueues/dequeues, por lo que no es técnicamente una fuga , pero si se colocan objetos grandes en ConcurrentQueue, esto puede salirse de control rápidamente. La documentación no toma nota de este peligro..NET Framework - ¿Posibles clases con pérdida de memoria?
Me preguntaba ¿qué otras posibles fallas de memoria existen en la biblioteca de clases base? Sé acerca de la subcadena (es decir, si llamas a subcadena y solo retienes el resultado, toda la cadena todavía estará en la memoria). ¿Alguna otra que te hayas encontrado?
Sip. Java resolvió esto convirtiéndolo para usar un StringBuilder; No sé por qué .NET no ha hecho lo mismo. –
.NET tiene lo mismo que en System.Text – Aren
El compilador VS C# también es lo suficientemente inteligente como para convertir expresiones como ("This" + "is" + "string #" + stringNumber) en StringBuilder internamente, si tiene sentido para hacerlo –