- PR -

画面のビットマップ形式に関する情報を取得するために、画面と互換するビットマップを作成しようとして失敗

1
投稿者投稿内容
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2006-05-23 11:49
現在、VB.NETでウインドウズアプリケーションを開発、
リリースしたところ、表題の、

「画面のビットマップ形式に関する情報を取得するために、画面と互換するビットマップを作成しようとして失敗しました。」

というエラーが日に数件発生するようになりました。

調べてはみたのですが、さっぱり手がかりがなくどう対応してよいか困っています。
もし、同様のエラーに遭遇した事のある方や、
なんらか情報をお持ちの方がいれば知恵を拝借させていただきたく思います。

開発環境:VisualStudio2003(VB.NET)
OS: Windows 2000 Professional (バージョン: 5.0.2195、ビルド番号: 2195)
合計物理メモリ: 1,038,412KB
エラー発生時の利用可能メモリ: 365,604KB

スタックトレースのダンプ
-------------------------
at System.Windows.Forms.DibGraphicsBufferManager.bFillBitmapInfo(IntPtr hdc, IntPtr hpal, BITMAPINFO_FLAT& pbmi)
at System.Windows.Forms.DibGraphicsBufferManager.CreateCompatibleDIB(IntPtr hdc, IntPtr hpal, Int32 ulWidth, Int32 ulHeight, IntPtr& ppvBits)
at System.Windows.Forms.DibGraphicsBufferManager.CreateBuffer(IntPtr src, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height)
at System.Windows.Forms.DibGraphicsBufferManager.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetBounds)
at System.Windows.Forms.DibGraphicsBufferManager.AllocBuffer(IntPtr target, Rectangle targetBounds)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
-------------------------

導入しているクライアントマシンはほとんどWin2000ですが、
開発環境を含めXPではまだ同エラーの発生は確認できません。

ある程度発生するマシンは限定できますが、複数のマシンで発生しており、
比較的スペックの低いマシンで発生しているようです。(PenIIIとか)

よろしくお願いいたします。m(__)m
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-05-23 12:38
引用:

「画面のビットマップ形式に関する情報を取得するために、画面と互換するビットマップを作成しようとして失敗しました。」

というエラーが日に数件発生するようになりました。



どういう状況で発生しているのでしょうか?
起動時ですか? 運用中ですか? 連続運転中ですか?

引用:

スタックトレースのダンプ



GDI リソースが足りないとかかな?
内部で、自力でビットマップをいじってたりしますか?

引用:

導入しているクライアントマシンはほとんどWin2000ですが、
開発環境を含めXPではまだ同エラーの発生は確認できません。



Windows Update してみても状況に変化ないでしょうか?
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2006-05-23 14:52
渋木様:
早速の返信ありがとうございます。

問題のエラーの発生のタイミングは、運用中です。
(※再現性がないので、クライアントにヒアリングしたところ、)
大体次画面に遷移しようとしたタイミング等で発生しているようです。

>Windows Update してみても状況に変化ないでしょうか?
少なくともマシンにはSP4が当たっている状態で、
なるべく最新のUpdateを適用するようお願いしていますが、
特に変わらないようです。

>内部で、自力でビットマップをいじってたりしますか?
当方で開発した部分にはそういった箇所はないのですが、
他社の地図描画コントロールを利用しており、こいつがごりごり
ビットマップをいじっている可能性は多分にあります。

ただ、このコントロール内のエラーはすべて一度トラップして、
区別がつくようにしてあるのですが、このエラーについてはそれ以外の箇所で
発生しているらしく、因果関係が不明で、調査はしてもらってるのですが、
先方の環境では確認もできないためどう対応してよいか双方わからないという状態です。
(これが使い方次第で結構なメモリを食うことは間違いないのですが)

またGrapeCity社のTrueDBGridを利用していますが、トレースを見ると、
これの内部でも同様のエラーが出力されていることがまれにあるようです。

また、同様のスタックトレースで「メモリが不足しています。」
というメッセージが(400MB程度利用可能であるにもかかわらず、)
出力されることもまれにあります。

> GDI リソースが足りないとかかな?
なんらかのリソースが不足しているのではないかとは疑ってはいるのですが、
不勉強なものでどう調べればよいかわかっていません。
具体的にはどのあたりを確認したらよいものでしょうか?
ご教授いただければ幸いです。

よろしくお願いいたします。m(__)m
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-05-23 18:48
引用:

少なくともマシンにはSP4が当たっている状態で、



SP4 は最低ラインです。
SP4 以降、セキュリティロールアップや各種の HOTFIX が出ていますので。

引用:

大体次画面に遷移しようとしたタイミング等で発生しているようです。



前画面で使用していた資源は、すべてきちんと解放されているでしょうか?

引用:

なんらかのリソースが不足しているのではないかとは疑ってはいるのですが、
不勉強なものでどう調べればよいかわかっていません。
具体的にはどのあたりを確認したらよいものでしょうか?



不足しているリソースによって異なります>調査方法

GDI オブジェクトや User オブジェクトの単純な使用数なら、タスクマネージャでも観察できます。

が、もうちょっと何が起きているのか「あたり」がつかないと厳しいですね。


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-05-24 09:38 ]
1

スキルアップ/キャリアアップ(JOB@IT)