Quizá les haya sucedido que, cuando ya tenemos muchas ventanas abiertas las aplicaciones dejan de dibujarse bien o simplemente ya no abren más ventanas, tabs o controles. Esto sucede, por ejemplo, si abrimos aproximadamente unos 30 tabs en Internet Explorer o unas cuantas sesiones simultáneas de Visual Studio. Lo interesante es que pasa aún cuando según el administrador de tareas tengamos aun mucha memoria disponible. Pasa en Windows XP y en Windows Vista también.
El problema es que cada sesión de escritorio (desktop) interactiva de Windows cuenta con un espacio de memoria limitado que utiliza User32.Dll para crear objetos gráficos como ventanas, menús, controles, etc. Este espacio de memoria es de 3,072KB en Windows Vista (sin SP1) y se define en esta llave del registry:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems]
Windows="%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16"
Si estén teniendo problemas con esta limitante, pueden incrementar el valor de 3072 a uno mayor. Es importante hacerlo en incrementos relativamente pequeños (por ejemplo, de 1024KB) hasta que ya no tengan en problema. Si lo incrementan de más Windows puede dejar de arrancar.
El service pack 1 de Windows Vista aumenta este valor a 12,288KB por lo que con SP1 no debe de presentarse más este problema. También vale la pena mencionar que las versiones de 64 bits de Windows Vista manejan 20MB para este espacio y tampoco presentan este problema. La discusión detallada de este tema la pueden encontrar en estos tres artículos (en inglés):
http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx
http://blogs.msdn.com/ntdebugging/archive/2007/07/05/desktop-heap-part-2.aspx