MFC 6.0 VC++で処理が重くなる問題の解決方法

このQ&Aのポイント
  • MFC 6.0 VC++で処理が重くなる問題が発生しています。画面の再描画時に処理が遅くなる現象が起きており、描画処理の最適化が必要です。
  • OnPaintメッセージを受け取った後、画面に表示するための計算も行っており、これが処理の重さの原因になっている可能性があります。
  • 試しに仮想ウィンドウに描画してBitBlt()を実行する方法も試した結果、ちらつくことは減りましたが、処理が更に重くなってしまいました。適切な描画方法の選択が必要です。
回答を見る
  • ベストアンサー

MFC 6.0 VC++ で、処理が重くなります。

MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? そもそもダイアログベースで画像処理をしているのが間違いな気もするのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.1

処理が重くなってる状況でリソースは減っていきませんか? メモリリークなどは大丈夫ですか? 描画中も表示しっぱなしですか? カテゴリとしてはプログラミングの部類になるので そちらで再質問した方が適切なコメントが入るかもしれません。

TonoATS
質問者

お礼

ありがとうございます。 タスクマネージャーを見る限り、確保したメモリは解放できているようです。 ただ、描画を実行するたびにコミットチャージが増えているので、このあたりが怪しそうです。 描画中というか、CClinetDCで確保したDCに直接描画しているので表示しっぱなしということ?になるかもしれません。 プログラミングのカテゴリは別にあったのですね。 そちらの方に投稿してみます。 ありがとうございました。

関連するQ&A

  • MFC 6.0 VC++ で、処理が重くなります。

    MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? タスクマネージャーを見るとコミットチャージが増えているようです。 このコミットチャージもどう対処してよいのか良く分からないのですが、これが関係しているでしょうか?

  • MFCでOnPaintのタイミング

    Visual Studio 2008のMFCでOnPaint()が呼ばれるタイミングですが、 非表示の時など再描画が不要と思われるところで立て続けに 呼ばれているのが気になりました。 そのタイミングはどういう時でしょうか? といいますのも、ダイアログベースで OnPaint()の中でダブルッファリングを使用していくつかの処理をまとめて描画をしているのですが、 起動後数分後にCResourceExceptionで落ちてしまっていまして、 最小限の描画回数に済ませればそのようにはならないかと考えた次第です。 ※メンバにデバイスコンテキストとCBITAMAPを定義して使用しています。 BitBltするごとにDeleteObjectはしていますが・・・

  • 再描画について。

    VC++のMFC、ダイアログベースで画像処理のソフトを作っている者 ウィンドウを動かしたり他のウィンドウを重ねたりすると描画した画像が消えてしまうので、 再描画をしたいのですが、方法が分かりません。 分かる方がいらっしゃいましたらよろしくお願いいたします。

  • MFCのSDIとMDIについて

    MFCを使用する場合、ダイアログベースしか使用してこなかったためMDIとSDIについてよくわかりません。 実行してみるとフォーム?エディタ?みたいなものが立ち上がりますが、あれはいったい何をするためのものなのでしょうか? 検索してみると描画とかアニメーションとかがキーワードで出てきますが絵を描くものなのですか??

  • MFCでのPC毎の挙動について

    MFC使用のアプリケーションについて質問があります。 WINAPIと混在して、ある絵を描画するアプリケーションを MFCのダイアログベースにて作成しました。 開発を行ったPCでは問題なく想定した動作をしていますが、 別のPCで起動させるとウィンドウのみ出力され、×ボタンのクリックなど 全く動作しない状態になってしまいます。(他のソフトの操作は可能) 実際は待っていると(30分とか)動作する場合もありますが、 当然実用には適していません。 ちなみに一度起動してしまえば、次回は問題なく動くようです。 マルチメディアタイマーとダブルバッファなどを使用していますが、 何か影響しますか? このようにPCの違いで動作が変わってしまう要因をご存知ないでしょうか? 環境は下記のものです。 開発環境↓  XP SP3 VC2003  MFC ダイアログベース その他の実行環境↓  XP SP2 よろしくお願いします。

  • VC++2010 描画処理について

    VC++2010 描画処理について質問なんですが、 再描画するさい、前の描画した画像(自分が今作成しているプロジェクトでいうと前、描画した点が消えてしまってあらたに点が描画されるんですが)その前、描画された点を消すことなく新たに点が描画される方法が分からないので質問させていただきました。このままだったら直線にならない、そして点がただ動くだけのプロジェクトになります。点がただ動くだけのじゃない、線が描画される方法をよろしくお願いします。 ではよろしくお願いします。

  • MFCでデータベースを

    はじめまして。 VC++の初心者なのですが、MFCで開発を行おうとしております。そこで、MFCでのデータベースの扱い方をおしえていただきたいのです。 MFCのダイアログベースで開発をしているのですが、そこからデータベースを読みに行ったりは可能なのでしょうか。 よいサイト等あれば教えていただけないでしょうか。よろしくお願いいたします。

  • VC++2008にて、画面の動的変更処理について

    現在VC++2008のMFCにて開発を行っております。 ダイアログのテキストボックスAの値を変更し、 カーソルが移動した際に 他のテキストボックスBの値を、Aの値により処理がかかる のような処理は無理なのでしょうか? やはり、ボタン押下でしか画面の更新は無理なのでしょうか? ご教授頂ければ幸いです。

  • 「VC++6」ウィンドウの再描画

    VC++6を使って簡単なプログラムをダイアログベース作っています。 内容はリストを読み込み、1件ずつDBにSQLを発行して情報を取得していくという内容です。 画面には、プログレスバーも設置しており、普通に操作すると正常に、プログレスバーも動きます。しかし、いったん別のウィンドウをアクティブにして、作成した動作中のプログラムを再選択しても、画面は壊れたまま再描画されません。しばらくまって、リストのSQL発行が終わって、画面に結果が表示されたら、きちんと再描画されます。 そこまで処理が終わったら、他のウィンドウに切り替えて戻ってきても画面が壊れることはありません。 時間がかかるプログラムなので、動作中に別の仕事をするため、アクティブでなくても、きちんとウィンドウを更新したいのです。 ちなみに、ループ処理中にRedrawWindow();を入れてみましたがダメでした。 アドバイスよろしくお願いします。

  • VC++/MFCでリフレクション

    Javaでは、ObjectのgetClass()でClassクラスの インスタンスが取れ、実行時に指定した、メソッド名や、引数で、動的にメソッドを呼びだすようなリフレクション機能が使用できます。 同様のことをC#でも実装したことがあります。 VC++/MFCにて、このようなリフレクションをやるやり方を教えてください。 C++の標準あるいわ、MFCの機能など、どちらでもよいです。 メタクラス型のようなものを実行時に取得して、リフレクションする方法だと思います。 質問の内容はVC++.NETやVC++/CLIではないです。そちらのほうでのやり方は既に発見しました。

専門家に質問してみよう