none
開発環境からのexeの実行、直接exeの実行について。 RRS feed

  • 質問

  • いつもお世話になっております。
    下記質問についてお願い致します。


    【環境】
    Visual C++ 2008
    Windows 7


    Releaseにおいて、「デバッグを開始」からあるexeを実行した場合、
    タスクマネージャにて確認したメモリ使用量は"160,000K"となっ
    ておりました。

    Releaseフォルダに保存されている上記と同じexeを直接実行した場合、
    メモリ使用量は約3倍の"500,000K"となりました。

    ※ちなみに、OpneGLで3Dモデルを描画するためにポリゴンデータ(stl)
    を読み込んでいます。メモリ使用量を確認したとき、モデルの再描画等
    は行っておりません。(メモリ使用量に変動なし)

    このようなケースは何が原因と考えられるでしょうか。
    候補のようなものがございましたら、よろしくお願い致します。

     

    *******************************************************************

    質問の仕方が悪かったようなので改めて説明させて頂きます。

    Visual C++ 6.0で開発したアプリをVisual C++ 2008に移行し、
    Windows7環境でも動作するよう、プログラムを修正致しました。
    ※stlデータを3D表示するアプリ

    すべてのコンパイルが無事に終了して、【デバッグ開始】より
    プログラムを実行した場合は、特に問題なく描画されました。
    モデルの描画更新もスピーディです。
    ところが、【デバッグなしで開始】よりプログラムを実行した
    場合は、モデルの描画速度が明らかに【デバッグ開始】に比べ
    て遅くなりました。そこでタスク マネージャーをチェックしたら
    プライベート ワーキング セットが大きく異なると気付いた次第です。
    ※この現象はDebug,Releaseともに同じです。


    OpenGLの問題なのかもしれませんが、原因が特定できなかったため
    質問させて頂きました。よろしくお願い致します。

     

     

    2010年7月27日 4:04

すべての返信

  • タスク マネージャーのどの項目を確認されていますか?
    [プロセス] タブにデフォルトで表示されているのは「プライベート ワーキング セット」ですが、
    もしこれだとすると、単純にスワップ アウトしているだけだったりしませんか?

     タスク マネージャのメモリ列の意味
     http://windows.microsoft.com/ja-JP/windows-vista/What-do-the-Task-Manager-memory-columns-mean

    プロセスのメモリ使用量を監視するには、パフォーマンス モニターを使って、然るべき値を監視するのが良いと思いますが。
    2010年7月27日 5:04
  • totojo様

    ご返事が遅れてしまい、誠に申し訳ございませんでした。
    メモリの使用量についてですが、今まで誤った監視をしていたようです。
    ご指摘ありがとうございました。

     

    2010年8月16日 7:40
  • 編集して追記された内容も併せて読ませて頂きましたが、原因の特定は第三者にはできないと思われます。
    なるべく小さな再現可能なコード・ファイルなどを準備できないと、進展はないかもしれません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月16日 13:52
    モデレータ
  • Azuleanさんも書かれている通り、出されている情報から特定するのは無理だと思います。

    気になるのは潜在的なバグの可能性はないかくらいでしょうか。
    動作していても偶々動いているというケースも無くは無いので
    開発環境が変わってランタイム等の変化から潜在的にあったバグが
    顕在化したという可能性も考慮に入れるべきではないかと思います。

    提示されている内容からではこの程度の想像くらいしか出来ないと思います。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年8月17日 3:04
  • # 他の方が書かれているように原因の特定は困難ですが、こんなのもありますというネタとして。

    "デバッグなしで開始" "OpenGL" というキーワードに関連して、こんな話題があります。

     What might cause OpenGL to behave differently under the "Start Debugging" versus "Start without debugging" options? - Stack Overflow
     http://stackoverflow.com/questions/1799070/what-might-cause-opengl-to-behave-differently-under-the-start-debugging-versus

    「デバッグなしで開始」は Windows にアプリの起動を要求するだけですが、「デバッグ開始」はデバッガーを開始して、その中でアプリを起動してデバッガーとやり取りします。
    前者はアプリは全力で動いているのに対して、後者はアプリがある程度手加減しながら動いているイメージでしょうか。
    デバッガーの上だと「運悪く」動いてしまっているのは、本当は描画のパフォーマンスを奪ってしまうくらい速い処理が、
    デバッガーの上で実行するとそれほど速くなくなるので、その結果描画の処理をする余裕が生まれてしまう、というケースも考えられます。

    2010年8月17日 11:09
  • 「デバッグ開始」だとデバッガの影響があって速度が違うという説が正しいとすれば、以下のような手順で起動方法の影響の有無がわかりそうですね。

    1.「デバッグ開始」で起動する。
    2.それらしく動作することを確認する。
    3.「デバッグ」メニューの「すべてデタッチ」を選択する。
    4.デバッガは終了するが、プログラムは動いたままになる。
    5.速度面、メモリ面はどうなったか?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月17日 14:00
    モデレータ
  • PATIOさん
    totojoさん
    Azuleanさん


    ご回答、誠にありがとうございます。
    毎回返信が遅くなってしまい申し訳ございません。

    Azuleanさんの「すべてデタッチ」を試してみました。
    結果はスピーディに動き、メモリも問題ないようです。

    これは「デバッグなしで開始」と同じ状況にしたけど、
    スピーディに動いているという理解でよろしいのでしょうか。
    ご検討、よろしくお願い致します。

    2010年9月3日 1:44
  • これは「デバッグなしで開始」と同じ状況にしたけど、
    スピーディに動いているという理解でよろしいのでしょうか。
    ご検討、よろしくお願い致します。

    厳密に同じ状況ではないです。
    理由は、初期化処理などデバッガありですでに実行したコードがあるので、何らかの影響を受けている可能性があるためです。

    ただ、どういった原因かは何とも言えません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年9月3日 14:31
    モデレータ
  • OpenGLを使用した場合にメモリの確保量の違いが出る場合が有りうるのかとか、
    OpenGL内部で動作環境の状態を内部で判断して調整するような機能が組み込まれているのかとか

    OpenGLに関する情報を集めてみる必要がありそうな気もします。

    Azuleanさんも書かれているように初期化段階でOpenGLが内部的に何かやっているのであれば、
    同じ状態になっているとは言えないと思います。OpenGL内で動作環境のチェックを初期化時のみに
    行なっていたりすると起動時の状態で動作のパラメータも決まってしまうので言われているような現象も
    考えうると言う話になるのではないでしょうか。

    もし仮にですが、OpenGL関連の処理をバッサリコメントアウト等で動かなくした場合でも
    デバッグありとデバッグなしで動かした時に差が出るのかが気になりますね。
    それで状況がはっきりするとは言いませんが、OpenGLの影響をある程度絞り込む事は
    出来るのではないでしょうか。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年9月6日 0:41