CMultiDocTemplateを使用して一度に多くのドキュメントを開こうとしているC++mfcアプリケーションがあります。157番目のドキュメントに対してInitialUpdateFrameを呼び出すとすぐに、アプリケーションがクラッシュすることがわかりました。この制限がどこにあるのか誰か教えてもらえますか?どうもありがとう!
1 に答える
最も可能性の高い理由-WindowsUSERまたはGDIオブジェクトの制限に達しました。デフォルトでは、プロセスは10000を超えるUSERオブジェクトと10000のGDIオブジェクトを作成できません。ドキュメントビューに多くのコントロール/グラフィックオブジェクトが含まれている場合、制限を超えるのは非常に簡単です。10000/157=63。
したがって、ドキュメントビューが63以上のUSERオブジェクト(ウィンドウ、アイコン、カーソルなど)またはGDIオブジェクト(ビットマップ、ペン、ブラシ、フォントなど)を作成する場合、MFCは例外をスローCResourceException
し、明示的に処理しない場合、アプリケーションは次の理由で中止されます。未処理の例外。
これが問題の本当の根本原因であるかどうかを確認するのは非常に簡単です。タスクマネージャを開きProcesses
、メニューView->Select columns...
チェックUSER Objects
でタブを選択しますGDI Objects
。アプリケーションを実行し、アプリプロセスによって消費されたオブジェクトの数を確認します。
詳細については、この優れた記事を参照してください:Windowsの限界を押し上げる:USERおよびGDIオブジェクト。