0

ネイティブで STL を使用して、ネイティブとマネージドの Visual C++ を混在させて作業しています。奇妙な問題があります。すべての最適化を設定してリリース モードでソフトウェアをコンパイルすると、デバッグ モードよりもソフトウェアの実行速度が一貫して遅くなるようです。ここで何が問題なのですか?

これらは私のデバッグコマンドラインオプションです:

/Od /D "WIN32" /D "_D​​EBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c / Zi /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System .Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows .Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

これらは私のリリース コマンド ライン オプションです。

/Oi /Ot /Oy /GT /GL /D "WIN32" /D "_SECURE_SCL=0" /D "_HAS_ITERATOR_DEBUGGING=0" /D "VC_EXTRALEAN" /D "_UNICODE" /D "UNICODE" /FD /EHa /MD /Fd"Release\vc90.pdb" /W3 /nologo /c /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll " /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" / FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

4

2 に答える 2

1

コマンド ライン スイッチから診断することはまったく不可能です。プロファイラーを使用する必要があります。

ただし、関連することの 1 つは、/clr オプションを使用することです。コードで #pragma managed を明示的に使用しない限り、STL テンプレート コードであっても、すべてが IL に変換されます。つまり、最適化設定は、生成されたマシン コードにのみ適用されるため、まったく効果がありません。次に、JIT コンパイラーが最適化のために行うことに従います。たとえば、デバッガーが接続されている場合、デフォルトでは最適化されません。

于 2010-09-15T16:44:00.213 に答える
0

リリース バージョンのプロファイリングを試して、明らかに不適切な速度低下に気付いたかどうかを確認してください。必要に応じて、デバッグ バージョンからのプロファイル出力と比較します。

あるいは、デバッグ バージョンが主観的に「十分に速い」場合は、それをリリースします (リバース エンジニアリングの影響があるかもしれませんが)。

于 2010-09-15T17:05:46.547 に答える