QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

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

こんにちわ、最近仕事で携わるようになったASP.NET(VB)のシステムが
Debugモードで生成したDLLとPDBを使用して稼動しているようなのですが
Releaseモードで生成したDLLとの処理速度差が気になります。
Debugモードで生成するとデバッグ情報を含んでいるので
処理がReleaseのそれと比べて遅くなるのではないかと考えているのですが
実際どのくらいパフォーマンスに差が出るのか
もしご存知の方いらっしゃいましたら、コメントいただけませんでしょうか。
よろしくお願いします。

質問者:まつとうや

回答

まつとうや さん、こんにちは。

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

Releaseモードで生成したDLLとの処理速度差が気になります。

Debugモードで生成するとデバッグ情報を含んでいるので

処理がReleaseのそれと比べて遅くなるのではないかと考えているのですが

実際どのくらいパフォーマンスに差が出るのか

もしご存知の方いらっしゃいましたら、コメントいただけませんでしょうか。

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

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

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

こんにちは。

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

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

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

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

これは私の経験上のことですので、確証は持てませんので参考までに。
識者の方、ヘルプです。^^;
[ メッセージ編集済み 編集者: jk 編集日時 2005-10-17 13:46 ]

投稿者:jk

編集 履歴 (0)

じゃんぬねっと様、jk様
アドバイスをありがとうございました。
ケースbyケースで実際動かしてみないと分からないということで
納得出来ました。
10年くらい前にC++でWindowsアプリを開発していたものとしては
絶対Releaseの方が早いのではないかと思っていましたが
最近はそうでもないんですね、有難うございました。

投稿者:まつとうや

編集 履歴 (0)

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

絶対Releaseの方が早いのではないかと思っていましたが

最近はそうでもないんですね、有難うございました。

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

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

こんにちは。便乗の質問ですが・・・

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

ネイティブの場合にはファイルサイズが1ケタ違ってましたが・・・
マネージドの場合にはどう違うんだろう。

投稿者:cedman

編集 履歴 (0)

cedmanさんの書き込み (2005-10-18 19:18) より:

.Netにおいて、デバッグモードとリリースモードで生成されるexe/dllファイルには

どのような違いがあるのでしょうか?

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

MSDNよりもどぼんさんの記事がわかりやすいです。
http://dobon.net/vb/dotnet/programing/define.html

投稿者:ロンロン

編集 履歴 (0)

なるほどね、よくわかりました。ありがとうございました。

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

投稿者:cedman

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。