Limpiar DLLs residuales en memoria de forma automática

En un anterior artículo explicábamos (o eso se trató) la importancias de las DLL para la buena salud y rendimiento del sistema operativo y toda la red de aplicaciones en él. Explicábamos que todos los ejecutables, incluido el mismo sistema operativo, usaban las DLL como los elementos imprescindibles para poder funcionar.


En vez de integrar todo el código de funciones de las aplicaciones en el mismo aplicativo, buena parte de esas funciones las usan a través de DLLs independientes, algunas de ellas reutilizables, con lo que el mismo programa ahorra mucho trabajo de programación, se estandariza y ocupa menos espacio en disco.

Las DLL se almacenan en la memoria del equipo, el lugar más adecuado por ser mucho más rápido que un disco duro y teóricamente de forma temporal. También teóricamente, esas DLL cargadas en memoria deberían ser eliminadas de esa memoria cuando se cierra el programa que las usa para liberar espacio y recursos.

Muchas aplicaciones y ejecutables en general no liberan la memoria de muchas de esas DLL en desuso. La disculpa es que se mantienen en memoria por si necesitas abrir otra vez ese ejecutable, se ahorra tiempo y se mejora el rendimiento, pues cuando necesite usar esas DLL, ya estarían cargadas y disponibles.

Eso en equipos modernos, con memorias amplias y procesadores que cagan bits como caramelos en día de fiesta, puede que no se note mucho…pero aún quedan muchos, muchos, muchísimos…equipos con límites, y esas maniobras, que en el papel parecen una gran idea, los convierten en equipos lentos y desesperantes.

Dicho mi prólogo protocolario, les comento que hay una forma de "limpiar" u obligar al sistema a cerrar o descargar de la memoria del equipo automáticamente todas aquellas DLL que ya no se necesiten porque ya no hay en ejecución ninguna aplicación asociada a ellas.

Antes de entrar en el proceso de cocción, déjenme comentarles que esta limpieza automática no hace milagritos, y es muy posible que el impacto en algunos equipos apenas se note puesto que muchas DLL son compartidas por muchos ejecutables y aunque cerremos una aplicación que usa una determinada DLL, esta puede que no desaparezca de memoria porque aún quedan otros procesos que sí la necesitan. Así que el impacto real en un equipo podría ser poco menos que nada o muy bajo. Esa (entre otras) es una de las razones por las que Windows no tiene activada esa función de forma predeterminada e incluso hay que acudir al registro de Windows para activarla, porque no se dispone de un ajuste determinado en su interfaz de configuración.

Ahora sí les explico cómo activar esa limpieza automática.

Abrimos el Registro de Windows…ya saben, Pulsar la combinación de teclas WIN+R y escribir regedit.exe y pulsar en Aceptar

Una vez en el Registro de Windows (por imperativo legal tengo que recomendarles hacer una copia de seguridad para evitar posibles inconvenientes) navegammos hasta

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer

En un área bacía del panel derecho, hacemos clic derecho y seleccionamos Nuevo/Valor de DWORD (32 bits)

Al nuevo valor le damos el siguiente nombre:

AlwaysUnloadDll

Hacemos doble clic encima del valor recién creado y en el cuadro de edición escribimos el valor 1 (uno) en Información del valor, y validamos el dato pulsando en Aceptar.

Ya podemos cerrar el Editor de registro y para que este ajuste en el sistema tenga efecto, necesitaremos reiniciar el equipo.

Vuelvo a repetir que las posibles mejores en el rendimiento, en especial en la liberación de memoria podría ser poco o nada notable dependiendo del tipo de aplicaciones que usemos habitualmente y también que configuración tendremos en nuestro Windows, en especial de como tengamos configuradas las aplicaciones en segundo plano.

Podrían ser notables en equipos realmente con pocos recursos.

Ahí nos vemos y síganme los buenos.

0 comentarios