- - PR -
VB.NETで複数フォームを起動させる上限?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-02-08 12:03
お世話になります。
VB.NET2005での開発で、一つのフォームから複数のフォームを起動させる場合に、 一定数のフォームを起動させると、 「ウィンドウのハンドルを作成中にエラーが発生しました。」 とのエラーが返されて呼び出し側のフォームが落ちてしまうという現象に 直面しております。 一定数というのは16個目までは問題ないが、17個目を起動しようとすると 毎回落ちてしまうということです。 メモリ不足の可能性も疑ったのですが、複数台のマシンで検証しても常に17個目の フォーム起動時に落ち、タスクマネージャでもメモリには余裕があることが 確認できるため、別の原因ではないかと思われます。 過去ログなども見てみたのですが、「デスクトップアプリケーションヒープ」と いわれるものに原因があるのでしょうか? 今ひとつ、原因の確定ができなく困っております。 上記現象にお心当りの方は、お知恵をお貸しください。 よろしくお願いします。 |
|
投稿日時: 2007-02-08 15:38
試しにフォームを実行するときにタスクマネージャでハンドル数がどのくらい増加するか見て下さい。
タスクマネージャのツールバーから「表示(V)」−>「列の選択」−>「ハンドルの数」をチェックで表示されます。 −−−編集追記−−− ※フォームとゆうより、フォームにあるコントロールの数が原因のよ〜な。 [ メッセージ編集済み 編集者: 未記入 編集日時 2007-02-08 15:46 ] |
|
投稿日時: 2007-02-08 15:41
うちでは100個くらいウィンドウ出してみましたけど平気でしたよ。
|
|
投稿日時: 2007-02-08 16:03
Label を動的に無限増殖していたら、同じ例外が発生しました。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2007-02-08 21:52
どういう回答を、期待されていますか?
SURF0777さんが納得できればいい?それとも、SURF0777さんが上司など、他の人を納得させるための資料が欲しい? というのも、『過去ログなども見てみたのですが、「デスクトップアプリケーションヒープ」といわれるものに原因があるのでしょうか?』と書かれているので、「原因不明のメモリ不足エラーに対処する方法(デスクトップ・アプリケーション・ヒープ不足エラーに対処する方法)」<atmarkit.co.jp>なども読んでおいでだと、判断しています。その上で、さらに何が必要なんだろう? それとも、16画面というのが「たくさんのウインドウに該当しない、少なすぎる」ということでしょうか?それだったら監視すればいいと考え、「デスクトップ ヒープ 監視」で検索すると、こんなニュース<atmarkit.co.jp>が見つかりました。 未記入さんの追記にあるように、コントロールひとつひとつがウインドウ ハンドルを持ちます。「フォーム」は少なくても、1つのフォームが持つコントロールが多ければ、表示できるフォームの数が減ります。 _________________ |
|
投稿日時: 2007-02-09 13:25
未記入さん、Kazukiさん、じゃんぬねっとさん、Jittaさん
返信ありがとうございます。また、返信が遅れて申し訳ありません。 未記入さん>> タスクマネージャでハンドル数を見てみましたが、爆発的に増えたりは していないようでした。 Kazukiさん>> やはり、単純にウィンドウの数というわけではないみたいですね。 じゃんぬねっとさん>> 自分もラベルの無限増殖をおこなってみたら同じエラーを確認できました。 Jittaさん>> 的確なご指摘です(笑) 明確な現象の説明ができるだけの自分の理解度と根拠が欲しかったのです。 ご紹介いただいたToolでデスクトップヒープを確認してみたいと思います。 みなさまお知恵をありがとうございました。 ・1画面のコントロール数がかなりの数ということ。 ・複数台のマシンでも同じ画面数でエラーとなる。 ・他アプリを大量に起動させている場合、今回現象の起こった画面を起動できる数が 減ること。 ・OSで制限されたメモリ領域が存在すること(デスクトップヒープ) 上記のことから今回のエラーの原因を探ることができました。 結論としては、デスクトップヒープの上限に至ったため新たに画面のハンドルを クリエイトすることが出来ずエラーとなっているようです。 漠然とした質問になってしまい申し訳ありませんでした。 |
1