- PR -

DebugモードとReleaseモードの速度差について

1
投稿者投稿内容
まつとうや
常連さん
会議室デビュー日: 2004/09/04
投稿数: 42
投稿日時: 2005-10-17 13:23
こんにちわ、最近仕事で携わるようになったASP.NET(VB)のシステムが
Debugモードで生成したDLLとPDBを使用して稼動しているようなのですが
Releaseモードで生成したDLLとの処理速度差が気になります。
Debugモードで生成するとデバッグ情報を含んでいるので
処理がReleaseのそれと比べて遅くなるのではないかと考えているのですが
実際どのくらいパフォーマンスに差が出るのか
もしご存知の方いらっしゃいましたら、コメントいただけませんでしょうか。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-17 13:35
まつとうや さん、こんにちは。

引用:

まつとうやさんの書き込み (2005-10-17 13:23) より:

Releaseモードで生成したDLLとの処理速度差が気になります。
Debugモードで生成するとデバッグ情報を含んでいるので
処理がReleaseのそれと比べて遅くなるのではないかと考えているのですが
実際どのくらいパフォーマンスに差が出るのか
もしご存知の方いらっしゃいましたら、コメントいただけませんでしょうか。


これは作ったモノに因ります。
速度差を全く感じないものもありますし、さまざまです。

また、実際のパフォーマンスの値は EULA 上、
勝手に公表できないことになっていたハズです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
jk
ベテラン
会議室デビュー日: 2005/08/19
投稿数: 94
投稿日時: 2005-10-17 13:42
こんにちは。

ASP.NETは使ったことありませんが、VC++ではデバッグモードでも大抵の場合はさほど処理速度は変わらないです。
ただし、コードの最適化のオプションによってはReleaseが劇的に早くなることもあります。
※メインのループが命令キャッシュにすべて入った場合や最適化によって無駄ループが排除されたりなど。

ブレイクポイントやスタック境界チェック、ぬるぽチェックなどはCPU(IA32)の保護機能によって実装されているのでコードの実行が冗長になる事もあまりないと思います。

パフォーマンスが悪化する要因としては
・プログラムサイズが大きくなる=ロードに時間がかかる+CPUの命令キャッシュに収まらなくなる。
・最適化がオフになる=ループの最適化やレジスタの最適化、分岐の最適化が行われない。
・使用するメモリ空間が大きくなる。
・ライブラリがデバッグ用のコードになるので多少遅くなる。
※ハイパフォーマンスを要求するようなプログラムでなければさほど気にならないと思います。

実際のパフォーマンスの違いはアルゴリズムによって大きく変わってくると思いますので、一概にどうとは云えません。
実際のソースがあるなら、実測してみたらいいと思います。

これは私の経験上のことですので、確証は持てませんので参考までに。
識者の方、ヘルプです。^^;

[ メッセージ編集済み 編集者: jk 編集日時 2005-10-17 13:46 ]
まつとうや
常連さん
会議室デビュー日: 2004/09/04
投稿数: 42
投稿日時: 2005-10-18 09:13
じゃんぬねっと様、jk様
アドバイスをありがとうございました。
ケースbyケースで実際動かしてみないと分からないということで
納得出来ました。
10年くらい前にC++でWindowsアプリを開発していたものとしては
絶対Releaseの方が早いのではないかと思っていましたが
最近はそうでもないんですね、有難うございました。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-18 09:27
引用:

まつとうやさんの書き込み (2005-10-18 09:13) より:

絶対Releaseの方が早いのではないかと思っていましたが
最近はそうでもないんですね、有難うございました。


第三者が誤解しないように補足しますが、基本は Release の方が早いですよ。
例外周辺なんて特にそうです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
cedman
会議室デビュー日: 2004/06/21
投稿数: 13
投稿日時: 2005-10-18 19:18
こんにちは。便乗の質問ですが・・・

.Netにおいて、デバッグモードとリリースモードで生成されるexe/dllファイルには
どのような違いがあるのでしょうか?
デバッグモードではpdbファイルも一緒に生成されますが、このファイルを
削除しても普通にexe等は動きますよね?

ネイティブの場合にはファイルサイズが1ケタ違ってましたが・・・
マネージドの場合にはどう違うんだろう。
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2005-10-22 01:41
引用:

cedmanさんの書き込み (2005-10-18 19:18) より:
.Netにおいて、デバッグモードとリリースモードで生成されるexe/dllファイルには
どのような違いがあるのでしょうか?


実行レベルの込み入った話ではなく、VS2003でビルドした場合の話ですが、、
明示的にプリプロセッサディレクティブを書いている場合は明確な違いがありますよね?

MSDNよりもどぼんさんの記事がわかりやすいです。
http://dobon.net/vb/dotnet/programing/define.html
cedman
会議室デビュー日: 2004/06/21
投稿数: 13
投稿日時: 2005-10-23 08:11
なるほどね、よくわかりました。ありがとうございました。

昔VB6で組んでたころはよく
#define DEBUG(構文違うかも・・・)
なんてことをやって、リリース直前に消すなんてことやってたんですが、
これが自動で出来るのでとても便利ですね
1

スキルアップ/キャリアアップ(JOB@IT)