私はもともとネイティブのC++プログラマであり、C++ではプログラム内のすべてのプロセスがコードにバインドされています。つまり、実行しない限り何も起こりません。そして、あなたが書いたことに従って、メモリのすべてのビットが割り当てられ(割り当てが解除されます)。だから、パフォーマンスはすべてあなたの責任であり、良いことをすれば素晴らしいパフォーマンスが得られます。マネージコードでは、パフォーマンスを維持するために何を見なければなりませんか?
(注:STLのように自分自身で書いていないコードについては不平を言わないでください。結局のところ、C++のアンマネージコードであり、それは重要な部分です)。
JavaやC#のコードなどの管理コードでは、すべてのプロセスを制御するわけではなく、メモリはある程度隠されているか、管理されていません。そしてそれはパフォーマンスを比較的未知にし、ほとんどあなたは悪いパフォーマンスを恐れる。
私の質問は次のとおりです。マネージコードで優れたパフォーマンスを達成するには、どのような問題や太字線を覚えておく必要がありますか?
私だけのようないくつかの実践を考えることができます:
- はボクシングとアンボクシングの意識して。
- あなたのニーズに最も適し、最も低い運用コストを持つ正しいコレクションを選択してください。
しかし、これらは決して十分ではなく、説得力のあるものではありません。実際にはおそらく私はそれらを言及すべきではありませんでした。
私はC++ VS C#(またはJava)コードを比較することを求めていません。問題を説明するためにC++を説明しました。
常にJITはすべてをネイティブコードにコンパイルします。私はそれが投機的なインライン化や再コンパイルをしないと思っています。 –
@BenVoigt [この回答](http://stackoverflow.com/questions/4043821/performance-differences-between-debug-and-release-builds/4045073#4045073).NET JITコンパイラはいくつかのメソッドのライニングを含む最適化。私が作ったのは、管理された言語が、実行時に適応的に、または使用時に、そのような最適化を実行する能力を提供するということです。 – ahjmorton
ターゲットを静的に決定できる場合、インライン展開します。投機的なインライン展開は、Hotspotが行うより高度な技術であり、.NETではそうではありません。 –