Pro .NET Memory Management: gestión de memoria en .NET
Pro .NET Memory Management: gestión de memoria en .NET
Resumen:
Introducción
El libro Pro .NET Memory Management (Konrad Kokosa, 2018, 800 páginas) es, quizás, la guía técnica más profunda y detallada sobre la gestión de memoria en el ecosistema .NET. Escrito por uno de los principales expertos en rendimiento de .NET, revela el funcionamiento interno del recolector de basura (GC), las cachés, los grupos de memoria y los mecanismos de bajo nivel de CLR. A pesar de que el libro está orientado a C# y .NET, sus conceptos (gestión de referencias, fragmentación, generaciones de objetos) serán útiles para cualquier desarrollador que trabaje con lenguajes administrados. En PythonLib lo recomendamos a todos aquellos que quieran dejar de adivinar por qué la aplicación «se ralentiza» y empezar a entender cómo funciona realmente la memoria.
De qué trata este libro
El libro está dividido en tres partes lógicas. La primera parte introduce los fundamentos: arquitectura de la memoria virtual de Windows/Linux, tipos de datos en .NET (value/reference), pila y montón, estructura interna de los objetos. La segunda parte es el corazón del libro: un análisis exhaustivo del recolector de basura (Workstation GC, Server GC, recolecciones en segundo plano, generaciones 0/1/2, Large Object Heap, finalización, referencias débiles). La tercera parte está dedicada a aspectos prácticos: perfilado, volcados de memoria, diagnóstico de fugas, configuración de parámetros del GC, uso de Span<T> y Memory<T>, grupos de objetos y memoria nativa.
Para quién es este libro
El libro está dirigido a desarrolladores experimentados de C# (middle/senior) que ya se hayan enfrentado a problemas de rendimiento o quieran entender cómo funciona la plataforma a bajo nivel. Será difícil para los principiantes, ya que se asume conocimiento de los fundamentos de C#, CLR y conceptos básicos del sistema operativo. El libro también será útil para DevOps y arquitectos responsables de la configuración de entornos de producción.
Qué aprenderá el lector
- Cómo está organizado el managed heap — generaciones, segmentos, mapas de marcas (mark bits).
- Mecanismos de recolección de basura — mark-sweep-compact, trabajo con finalizadores, compactación de LOH.
- Cómo evitar fugas de memoria — patrones típicos (eventos, referencias estáticas, P/Invoke).
- Cómo configurar el GC — parámetros de configuración, modos (Workstation/Server), impacto en la latencia.
- APIs modernas — Span<T>, Memory<T>, ArrayPool, MemoryPool.
- Herramientas de perfilado — PerfView, WinDbg, dotMemory, trazado ETW.
- Análisis de volcados de memoria — búsqueda de raíces de fugas, visualización de tipos y tamaño de objetos.
Puntos fuertes
La principal virtud del libro es su profundidad. Konrad Kokosa no se limita a repetir la documentación, sino que explica por qué el GC toma ciertas decisiones, cómo funciona la write barrier, qué son las «card tables» y cómo afectan al rendimiento. El libro contiene numerosos esquemas, diagramas y ejemplos de código en C# (con comentarios a nivel de ensamblador). Cabe destacar especialmente los capítulos sobre diagnóstico, que convierten el libro en una guía práctica de optimización. Además, el libro sigue siendo relevante para .NET Core (aunque se publicó en 2018, muchos mecanismos no han cambiado).
A quién se recomienda
En PythonLib recomendamos este libro a todos aquellos que escriben servicios de alta carga, juegos en Unity (donde también se usa .NET) o se dedican a la refactorización de código heredado. Si quieres entender por qué una aplicación consume 2 GB de memoria cuando debería consumir 200 MB, este libro te dará la respuesta. También será útil para profesores de cursos de .NET que quieran añadir a su programa una sección sobre «Gestión de memoria».
Conclusión: Pro .NET Memory Management no es un libro para leer en la playa. Es una guía técnica que debería estar en el escritorio de todo desarrollador .NET serio. Requiere un estudio reflexivo, pero se amortiza con creces: después de leerlo, verás el código de otra manera y tus aplicaciones serán más rápidas y estables.