CPU使用率の軽減方などについて

解決


しろうと  2005-10-25 19:57:46  No: 126812

環境  VB6(SP6)Windows98_SE、Visual Studio TM6.0(SP6)  VALUSTAR(VT667J/3FD) RAM;126MB
素人の趣味のプログラミングです。

プログラムは殆ど完成したのですがCPU使用率が高いのが気になって質問させて頂きました。
グラフィック処理時に60%〜70%(システムモニターの表示)になります。
宜しければ改善ポイントやヒント、以下に記しました様なプログラム作成での問題点などご指導お願いします。

プログラムの概要はデザイン用プログラム側で白黒ソース画像を元にフォアカラー、バックカラーの変更等を
メインにした操作やメニュー設定等を行い、コマンドや引数、メニュー設定の情報を記録します。
この情報ファイルを再生用プログラムで読込んで、専用メニューを作成して再生するものです。

Webで得た情報から DoEventsとAPIのsleep関数を使うことで対応することを学び、ループ処理部分等の一部に挿入しています。

グラフィック処理がメインのプログラムですが、フリーのAPIを使用したサンプルを利用させて頂いています。
グラフィック処理(GetBitmap..、SetBitmap..)の部分は改変する等の技量は到底有りません。

プログラムの主な機能は以下の通りです。
  1.白黒のソース図面を元に指定範囲(長方形、多角形、楕円、全体)のフォアカラー、バックカラーの変更
  2.指定位置への文字書込み機能
  3.指定範囲(長方形、多角形、楕円、全体)の点滅
  4.表示の更新方法
  5.休止タイムの挿入
  6.別のソース図面のロード/編集(カラー変更が主体)
  7.表示専用画像のロード表示
  8.表示専用テキストファイルのロード表示
  9.WAVファイルのロード再生
  10.上記の機能をタイマーイベントで実行する機能
  11.ホットスポット機能(テキストロード表示、文書ロード表示、イメージロード縮小表示、WAVロード再生)
  12. メニュータイトル、メニュー項目、ツールバーのコメント設定機能
  13. 画面表示部分はスクロール可能、フォームリサイズ可能


030  2005-10-25 21:16:07  No: 126813

CPU負荷を下げたい理由は?
普通負荷が上がっても処理が速い方が好まれますが。


特攻隊長まるるう  2005-10-25 22:01:34  No: 126814

処理ステップ数が同じで、無駄な処理が無い(全ての処理が必要不可欠)
なら一定時間中の処理量を減らす為には、全体の処理時間を延ばすしか
ないですよね?
>グラフィック処理時に60%〜70%(システムモニターの表示)になります。
市販のアプリと比較して…そんなもんでは?と思う部分もあります。が、
その状態が長く続くとか、処理ステップ数に合わない位の負荷だとか、
全体を見て、基準がある評価じゃないと…何とも言えません。一瞬でも
60%〜70%になっちゃダメとかいう話なの???


しろうと  2005-10-25 22:56:08  No: 126815

Webを徘徊中にCPU使用率の記事を見つけ、前回自作したゲームプログラムのことですが、
短時間でパソコンの冷却ファンが回りだす事を思い出しチェックしましたところ、
かなり連続して無茶苦茶な数字だったのでタイミング調整の以下の部分を
  Private Sub Delay(ByVal ms As Single)
      ' 指定したミリ秒間だけプログラムを遅らせる.
      Dim StartTimer As Single
      StartTimer = timeGetTime
      Do
          DoEvents
      Loop While (ms + StartTimer) > timeGetTime
  End Sub
  
  次のように変更し
  Private Sub Delay(ByVal ms As Single)
      ' 指定したミリ秒間だけプログラムを遅らせる.
      Dim StartTimer As Single
      StartTimer = timeGetTime
      Do
          DoEvents
          sleep 1
      Loop While (ms + StartTimer) > timeGetTime
  End Sub

  ループ中の調整部分は  Delay ××  としていたのを
    DoEvents
    sleep ××
  に直しましたところ、動作速度を損なわずにCPU使用率をかなり低減できました。

ご掲示の通り、今回のプログラムでは実行速度を考えますとループ処理中でも最低限の
ウェイト(sleep)しか挿入出来ません。

030さん、特攻隊長まるるう さんレス有難う御座います。
返信文の作成中に回答頂いちゃいました。

>CPU負荷を下げたい理由は?

  Webの記事を見て素人考えで、やはりこのままじゃまずいかな?と思っただけです。

>普通負荷が上がっても処理が速い方が好まれますが。

  そうですよね!

>処理ステップ数が同じで、無駄な処理が無い(全ての処理が必要不可欠)
>なら一定時間中の処理量を減らす為には、全体の処理時間を延ばすしか
>ないですよね?

  再生用プログラムの方は全くご掲示通りに該当します。

>市販のアプリと比較して…そんなもんでは?と思う部分もあります。が、
>その状態が長く続くとか、処理ステップ数に合わない位の負荷だとか、
>全体を見て、基準がある評価じゃないと…何とも言えません。一瞬でも
>60%〜70%になっちゃダメとかいう話なの???
  
  仕様とか難しい注文の無い素人のプログラムです。
  60%〜70%になるのは、広範囲のカラー変更操作のコマンド(プロシージャ)を実行する場合で
  短時間(大まかに1秒位)です。

頂きました回答から、自力でこれ以上は望めそうも有りませんし、
目安が全く解らなかったので勉強になりました。
030さん、特攻隊長まるるう さん有難うございました。


しろうと  2005-10-25 23:13:08  No: 126816

解決チェック忘れました。
有難うございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加