2015-11-20 3 views
0

nous avons des fuites de ressources GDI qui provoquent de temps en temps "Win32Exception pas assez de stockage est disponible pour traiter cette commande" (related question).Les fuites GDI d'un processus peuvent-elles affecter d'autres processus?

Notre application est composée d'une application Word Addin et d'une application C#. Une fuite dans l'extension Word peut-elle supprimer les ressources de l'application C#? Nous avons vu l'application se bloquer après certains problèmes Addin non liés. En d'autres termes, les ressources GDI sont-elles allouées exclusivement par processus ou sont-elles partagées d'une manière ou d'une autre?

+1

Oui, les objets GDI sont attribués à partir du segment de bureau qui est partagé par tous les processus qui fonctionnent sur ce bureau. La taille est limitée à 64K objets sur un bureau interactif pour des raisons d'application. Mais vous ne pouvez pas l'épuiser avec juste un mauvais processus qui fuit, il en faut plusieurs. Si douteux que vous ayez trouvé la vraie raison. Sinon, très facile à voir dans le Gestionnaire des tâches, utilisez Affichage> Sélectionner les colonnes pour ajouter la colonne "Objets GDI". –

Répondre

2

Le nombre exact peut dépendre de la version de Windows mais est généralement une limite théorique de 65 536 par session. En réalité, ceci est inférieur (par exemple 16 384 dans Windows 2000).

Il existe également une limite par processus d'environ 10 000 poignées, bien que cela puisse être globalement modifié via le paramètre de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota. Bien que ce paramètre ne doit pas être modifié par une application car c'est un paramètre global pour l'ordinateur.

MSDN - GDI Objects

Old New Thing - Why is the limit of window handles per process 10,000?