none
VS2005からEXEを実行した場合のパフォーマンスについて RRS feed

  • 質問

  • Visual C# フォーラムに書くべきかもしれませんがこちらで・・・。



     VistaでVS2005からEXEを実行した場合のパフォーマンスについてご相談させて下さい。

    VS2005にてソリューションを作り、C#プロジェクトを8つほど管理しています。
    C#のコマンドラインプログラムを『F5』 で実行をすると
    保存が終了してから実行されるまでの時間が10秒ほど掛かり、
    XPより2倍以上パフォーマンスが低下します。

    しかし、VS2005からではなくDebugフォルダ内のEXEを直接実行すると
    実行までの時間は少なくなりパフォーマンスも1.5倍くらいまでは回復します。

    この問題を解決する方法は御座いませんでしょうか?

    又、同じ環境でOSがXPだと問題ありません。


    OS:Vista(SP1)
       VS2005(SP1)
    セキュリティ:カスペルスキー8.0.0.454


    hisuzuki
    2009年2月11日 8:24

回答

  • 回答ではありませんが…。

    CatTail さん の発言:

     ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
     [F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
     DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。

    F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)
    しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。

    どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。



    佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。


    参考になった返信には「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に指定できます)。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 14:22
    モデレータ
  •  ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
     [F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
     DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。

     ただ、XPでは問題が発生しないというのは気になります。(逆だったら、まだわかるんだけど)

     何が原因で遅いか切り分ける必要がありますが、(確実ではありませんが)パフォーマンスモニタやSysinternals(http://technet.microsoft.com/ja-jp/sysinternals/default.aspx)に含まれるツール群(VistaならProcmon.exeかな?)を使ってみてはどうでしょうか。

     あまり参考にならない情報ですみません。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 5:40
  • 「パフォーマンス」とはどのような指標でしょうか?
    また「10秒ほど」の内訳も何に何秒かかっているのかが肝心です。

    ちなみにVistaはファイルが更新されると全力で検索インデックスの更新を行います。disk I/Oの8割を持っていかれるぐらいに…。
    またEXEファイルが作成された/更新されたとあらば、ウィルス対策ソフトとWindows Defenderも黙ってはいません。

    もしディスクアクセスLEDが点灯しっぱなしならばこれらの可能性があります。
    管理ツール-「信頼性とパフォーマンスモニタ」を使用するとどのプロセスがどのファイルにアクセスしているのかを確認できます。
    これで遅い状況に納得できるかもしれません。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 12:49
  • hisuzuki の発言:

    案件1:
     VS2005からF5でEXEを実行すると起動するまでに凄い時間が掛かる。
     どうもソースに変更が無いのに毎回ビルドが通り、EXE起動までに10秒ほど掛かってる。
     
    案件2:
     VS2005からF5でEXEを起動すると
     同スペックで同じ環境のXPマシンよりVistaマシンが2倍実行時間が掛かる。
     しかし、VS2005からではなくEXEを直接実行すると実行時間が2倍までは掛からず1.5倍くらいになる。

    と言う質問でした。


    hisuzuki


    Debug の下を見ると解ることですが、vshost というアプリケーションができています。VS から起動すると、vshosts が起動します。サイズはこちらの方が若干大きいので、その分時間もかかるでしょう。しかし、このプロセスは起動しっぱなしなので、2回目は早いはずです。これは、プロジェクトのオプションに設定があります。

    プロジェクトが常にビルドされる件は、まず、Debug の下のファイルを、日付が変わっていないか確認してみましょう。日付が変わっているなら、ビルドされています。これ、プロジェクト単位に指定できたと思うのですが、オプションが探し出せませんでした。VS の設定として、常にビルドするようなオプションがあります。今、VS2008 の環境なので違っているかもしれませんが、[ツール]メニューから[オプション]を選び、[プロジェクトおよびソリューション]の中の[ビルド/実行]を見てください。このメニュー構成は VS2008 です。VS2005 だと、違うかもしれません。


    Jitta@わんくま同盟
    • 回答としてマーク zilch_1975 2009年2月13日 3:24
    2009年2月13日 1:45

すべての返信

  •  ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
     [F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
     DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。

     ただ、XPでは問題が発生しないというのは気になります。(逆だったら、まだわかるんだけど)

     何が原因で遅いか切り分ける必要がありますが、(確実ではありませんが)パフォーマンスモニタやSysinternals(http://technet.microsoft.com/ja-jp/sysinternals/default.aspx)に含まれるツール群(VistaならProcmon.exeかな?)を使ってみてはどうでしょうか。

     あまり参考にならない情報ですみません。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 5:40
  • 「パフォーマンス」とはどのような指標でしょうか?
    また「10秒ほど」の内訳も何に何秒かかっているのかが肝心です。

    ちなみにVistaはファイルが更新されると全力で検索インデックスの更新を行います。disk I/Oの8割を持っていかれるぐらいに…。
    またEXEファイルが作成された/更新されたとあらば、ウィルス対策ソフトとWindows Defenderも黙ってはいません。

    もしディスクアクセスLEDが点灯しっぱなしならばこれらの可能性があります。
    管理ツール-「信頼性とパフォーマンスモニタ」を使用するとどのプロセスがどのファイルにアクセスしているのかを確認できます。
    これで遅い状況に納得できるかもしれません。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 12:49
  • 回答ではありませんが…。

    CatTail さん の発言:

     ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
     [F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
     DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。

    F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)
    しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。

    どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。



    佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。


    参考になった返信には「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に指定できます)。
    • 回答としてマーク zilch_1975 2009年2月12日 20:06
    2009年2月12日 14:22
    モデレータ
  •  CatTailさん
     F5を押すと『ビルドしています・・・』で10秒くらいかかります。
     XPでは全く問題ないのですが・・・。

    hisuzuki
    2009年2月12日 17:35
  • 佐祐理さん
     「パフォーマンス」と言うのは実行パフォーマンスです。
     VS2005からF5で実行するとDebug/ Release/ のEXEを直接実行した時の1.5~2.0倍のパフォーマンスの差が出ます。
     検索インデックスは『無効』にしているつもりなのですが・・・。
     
    hisuzuki
    2009年2月12日 20:06
  • 書いてることが最初と違うし…。
    最初の記述は、VS2005から起動するとXPより2倍、EXEを直接起動すると(何かより)1.5倍、と書かれています。
    今度は、EXE直接起動とVS2005からとの比較ですか。
    それからパフォーマンスを実行パフォーマンスと言い換えてもやっぱりなんのことだかわかりません。
    単位はなんでしょう…なんとなく?

    比較対象が不明確で、単位がなんとなくならば、答えは簡単です。
    きのせいです。まず何と比較しているのかご自身で理解しましょう。
    2009年2月12日 23:50
  •  なんだか馬鹿にされたような印象を受ける文面ですが
    実行パフォーマンスでは説明が足りませんね・・・。
    これはEXEの実行開始から終了までの計測時間(msec)を言ってました。

    案件1:
     VS2005からF5でEXEを実行すると起動するまでに凄い時間が掛かる。
     どうもソースに変更が無いのに毎回ビルドが通り、EXE起動までに10秒ほど掛かってる。
     
    案件2:
     VS2005からF5でEXEを起動すると
     同スペックで同じ環境のXPマシンよりVistaマシンが2倍実行時間が掛かる。
     しかし、VS2005からではなくEXEを直接実行すると実行時間が2倍までは掛からず1.5倍くらいになる。


    と言う質問でした。




    hisuzuki
    2009年2月13日 0:52
  • hisuzuki の発言:

    案件1:
     VS2005からF5でEXEを実行すると起動するまでに凄い時間が掛かる。
     どうもソースに変更が無いのに毎回ビルドが通り、EXE起動までに10秒ほど掛かってる。
     
    案件2:
     VS2005からF5でEXEを起動すると
     同スペックで同じ環境のXPマシンよりVistaマシンが2倍実行時間が掛かる。
     しかし、VS2005からではなくEXEを直接実行すると実行時間が2倍までは掛からず1.5倍くらいになる。

    と言う質問でした。


    hisuzuki


    Debug の下を見ると解ることですが、vshost というアプリケーションができています。VS から起動すると、vshosts が起動します。サイズはこちらの方が若干大きいので、その分時間もかかるでしょう。しかし、このプロセスは起動しっぱなしなので、2回目は早いはずです。これは、プロジェクトのオプションに設定があります。

    プロジェクトが常にビルドされる件は、まず、Debug の下のファイルを、日付が変わっていないか確認してみましょう。日付が変わっているなら、ビルドされています。これ、プロジェクト単位に指定できたと思うのですが、オプションが探し出せませんでした。VS の設定として、常にビルドするようなオプションがあります。今、VS2008 の環境なので違っているかもしれませんが、[ツール]メニューから[オプション]を選び、[プロジェクトおよびソリューション]の中の[ビルド/実行]を見てください。このメニュー構成は VS2008 です。VS2005 だと、違うかもしれません。


    Jitta@わんくま同盟
    • 回答としてマーク zilch_1975 2009年2月13日 3:24
    2009年2月13日 1:45
  • Azulean の発言:

     F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)
    しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。

    どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。



    佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。


    げ、そうだったんですか、今まで勘違いしていたまま覚えていました。

    お礼?として「☆参考になった投稿」をクリックしました。

    2009年2月13日 2:29
  • Jittaさん、有益な情報有難う御座いました!

    案件1の
     VS2005からF5でEXEを実行すると起動するまでに凄い時間が掛かる。
     ですがビルドが通らない状況でも遅いので調べてみたところ、
     『ビルド後に実行するコマンドライン』に
     プロジェクトごとにDLLやEXEを所定ディレクトリへコピーする作業が入ってました。
     ・・・お恥ずかしい・・・。
     XPでは気にならなかったのですがVISTAならではですね・・・。
     

    hisuzuki
    2009年2月13日 14:43