2015-11-20 39 views
0

我們有時常導致的GDI資源泄漏「Win32Exception沒有足夠的存儲可用於處理此命令」(related question)。GDI是否可以從一個進程泄漏影響其他進程?

我們的應用程序由一個Word Addin和一個C#應用程序組成。 Word插件中的泄漏可以從C#應用程序中刪除資源嗎?我們看到一些無關的Addin問題後應用程序崩潰。

換句話說,GDI資源是專門爲每個進程分配還是以某種方式共享?

+1

是,GDI對象從其由該桌面上運行的所有進程共享桌面堆分配。由於appcompat的原因,交互式桌面上的大小限制爲64K對象。但是你不能用一個壞的過程泄漏它,它需要幾個。所以很懷疑你找到了真正的原因。否則很容易在任務管理器中看到,使用視圖>選擇列添加「GDI對象」列。 –

回答

2

準確的數字可以取決於窗口的版本,但通常每個會話的理論限制爲65,536。實際上這個數值較低(例如Windows 2000中的16,384)。

每個進程的處理上限也有大約10,000個處理,儘管這可以通過註冊表設置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota進行全局更改。儘管這個設置不應該由應用程序改變,因爲它是計算機的全局設置。

MSDN - GDI Objects

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

相關問題