C# 程序報錯:創建窗口句柄時出錯
在一次做上位機Winform程序,需要用GDI技術畫圖形顯示,當界面上增加很多 對象后,再添加時報錯"創建窗口句柄時出錯"
打開任務管理器,詳細信息,添加列,將用戶對象和GDI對象顯示出來,發現 用戶對象接近1W ,
問題原因:
GDI對象
Windows中將GDI對象和用戶對象都限制為最大10000個,可以通過修改注冊表來重新設置。
大概原因是 GDI非托管資源 未釋放的原因。
解決方法:
1、起初通過抓Dump然后用WinDbg去分析,但是 其內存占用并不大,分析不出啥問題
2、直接從代碼入手,一邊操作一邊看GDI對象的增加,看那個函數調用GDI對象數增加明顯。
從添加一個設備的代碼 一步步調試跟進,看調用哪個函數時 GDI對象/用戶對象,增加的多。
發現一個類庫項目中: new Form().CreateGraphics()每次調用都會加5個GDI對象,而這個函數會調用好多次,
于是設置一個靜態變量:static Graphics = new Form().CreateGraphics();
修改后 測試發現GDI對象數 趨于正常。

浙公網安備 33010602011771號