トップ回答者
VS2005からEXEを実行した場合のパフォーマンスについて

質問
-
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
回答
-
回答ではありませんが…。
CatTail さん の発言:F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
[F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。
しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。
どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。
佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。
参考になった返信には「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に指定できます)。- 回答としてマーク zilch_1975 2009年2月12日 20:06
-
ソースコードの修正はしていないのに、[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
-
「パフォーマンス」とはどのような指標でしょうか?
また「10秒ほど」の内訳も何に何秒かかっているのかが肝心です。
ちなみにVistaはファイルが更新されると全力で検索インデックスの更新を行います。disk I/Oの8割を持っていかれるぐらいに…。
またEXEファイルが作成された/更新されたとあらば、ウィルス対策ソフトとWindows Defenderも黙ってはいません。
もしディスクアクセスLEDが点灯しっぱなしならばこれらの可能性があります。
管理ツール-「信頼性とパフォーマンスモニタ」を使用するとどのプロセスがどのファイルにアクセスしているのかを確認できます。
これで遅い状況に納得できるかもしれません。
- 回答としてマーク zilch_1975 2009年2月12日 20:06
-
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
すべての返信
-
ソースコードの修正はしていないのに、[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
-
「パフォーマンス」とはどのような指標でしょうか?
また「10秒ほど」の内訳も何に何秒かかっているのかが肝心です。
ちなみにVistaはファイルが更新されると全力で検索インデックスの更新を行います。disk I/Oの8割を持っていかれるぐらいに…。
またEXEファイルが作成された/更新されたとあらば、ウィルス対策ソフトとWindows Defenderも黙ってはいません。
もしディスクアクセスLEDが点灯しっぱなしならばこれらの可能性があります。
管理ツール-「信頼性とパフォーマンスモニタ」を使用するとどのプロセスがどのファイルにアクセスしているのかを確認できます。
これで遅い状況に納得できるかもしれません。
- 回答としてマーク zilch_1975 2009年2月12日 20:06
-
回答ではありませんが…。
CatTail さん の発言:F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)ソースコードの修正はしていないのに、[F5]で実行すると(ビルドしていないにも関わらず)実行されるまでに時間がかかる、ということでしょうか?
[F5]キーで実行した場合、JIT(ジャストインタイムコンパイラ)でネイティブコードにコンパイルしているから、という事はないですか?
DebugフォルダにあるEXEは、JITでのコンパイルは済んでいる考えられるので、原因としてはそれらしいのですが。
しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。
どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。
佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。
参考になった返信には「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に指定できます)。- 回答としてマーク zilch_1975 2009年2月12日 20:06
-
なんだか馬鹿にされたような印象を受ける文面ですが
実行パフォーマンスでは説明が足りませんね・・・。
これはEXEの実行開始から終了までの計測時間(msec)を言ってました。案件1:
VS2005からF5でEXEを実行すると起動するまでに凄い時間が掛かる。
どうもソースに変更が無いのに毎回ビルドが通り、EXE起動までに10秒ほど掛かってる。
案件2:
VS2005からF5でEXEを起動すると
同スペックで同じ環境のXPマシンよりVistaマシンが2倍実行時間が掛かる。
しかし、VS2005からではなくEXEを直接実行すると実行時間が2倍までは掛からず1.5倍くらいになる。
と言う質問でした。
hisuzuki -
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
-
Azulean の発言:
F5キーだとデバッガがアタッチされるので、JITの最適化は抑制されます(オプションによる?)。そう言う意味では確かに、パフォーマンスが落ちる可能性はあります。(実感できる程なのかは分かりませんが…)
しかし、DebugフォルダやReleaseフォルダのexeはJITのコンパイルが済んでいるわけではありません。
どちらの実行方法でも、実行中の必要な時(Just In Time)にILからネイティブコードにコンパイルされます。
佐祐理さんが書かれているように、F5キーだと毎回コンパイル(各言語からILへのコンパイル)が実行されることから、ファイルの更新が度重なることが原因になっている可能性はあります。
げ、そうだったんですか、今まで勘違いしていたまま覚えていました。
お礼?として「☆参考になった投稿」をクリックしました。