33

C#リリースコードの多くは、[コードの最適化]オプションをオフにしてビルドされています。これは、リリースモードでビルドされたコードをより簡単にデバッグできるようにするためだと思います。

バックエンドWebサービスに接続する非常に単純なデスクトップソフトウェア(つまり、特にプロセッサを集中的に使用するアプリケーションではない)を作成しているとすると、何らかのパフォーマンスの低下が予想される場合はどうでしょうか。

また、特定のプラットフォームがさらに影響を受ける可能性はありますか?例えば。マルチプロセッサ/64ビット。

4

5 に答える 5

33

「パフォーマンスヒット」の質問に答えられるのはあなただけです。両方の方法で試して、パフォーマンスを測定し、何が起こるかを確認してください。ヒットは巨大であるか、存在しない可能性があります。これを読んでいる人は誰も、あなたにとって「巨大」が1マイクロ秒を意味するのか20分を意味するのかを知りません。

最適化スイッチがオンのときに、ジッターではなくC#コンパイラによってどのような最適化が行われるかに関心がある場合は、以下を参照してください。

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

于 2010-03-15T14:16:04.893 に答える
14

詳細については、http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspxを参照してください。

簡単に...

マネージコードでは、ランタイムのJITterがほぼすべての最適化を行います。このフラグから生成されたILの違いはかなり小さいです。

于 2010-03-15T00:41:34.980 に答える
6

実際、違いがあり、時には非常に重要です。パフォーマンスに実際に影響を与える可能性があるもの(JITが完全に処理していないものであるため):

  • 不要なローカル変数(つまり、呼び出しごとに大きなスタックフレーム)

  • あまりにも一般的な条件付き命令であるため、JITはそれらを非常に簡単な方法で変換します。

  • 不必要な分岐(JITによってもうまく機能しません-結局のところ、すべてのスマートな最適化を行うのにあまり時間がありません)

    したがって、数値的なことをしている場合は、最適化をオンにします。それ以外の場合は、まったく違いは見られません。

于 2010-03-15T10:56:18.727 に答える
2

コンパイラーによって行われる最適化はかなり低レベルであり、ユーザーのエクスペリエンスに影響を与えることはありません。

アプリケーションの最適化を定量化したい場合は、最適化されていないビルドと最適化されたビルドのプロファイルを作成し、結果を比較するだけです。

于 2010-03-15T00:41:01.423 に答える
2

複雑でCPUを集中的に使用するコード(私が使用しているコードは、コンピューターを100%使用するのに十分なスレッドを生成できるモンテカルロシミュレーションです。これは36コア環境でテストされました)では、パフォーマンスの低下は最大4になる可能性があります。倍高い!2時間かかるシミュレーションは、最適化フラグなしで約9時間かかります。(パスは約500,000であり、各パスには約2000の異なるオブジェクトに対して500のステップがあり、各オブジェクトの計算は非常に複雑です)。

于 2018-08-05T06:28:41.073 に答える