私が知っているすべての .net プロファイラーは、CPU キャッシュの影響を考慮していません。
CPU キャッシュからフィールドを読み取ると、メイン メモリから読み取るよりも 100 倍速くなる可能性があることを考えると、これは大きな要因になる可能性があります。(私は答えでこれを説明しなければなりませんでした)
プロファイラーが遅いと言うループを高速化するために長いタイマーを費やす人が多すぎるのを見てきました。
たとえば、データ アクセスで CPU キャッシュが不足しているかどうかを確認したり、より信頼できる基本的なプロファイリング結果を取得したりしたいと考えています。
過去に、データをよりコンパクトにすることですべてが CPU キャッシュに収まるか、データがアクセスされる他のキャッシュを変更すると大きな効果が得られることを発見しました。例えば
AccessArrarFromStartAndDoSomething()
AccessArrayFromEndAndDoSomethingElse()
それなら良い
AccessArrarFromStartAndDoSomething()
AccessArrayStartEndAndDoSomethingElse()
配列が CPU キャッシュに収まらない場合でも、そのタイプの改善を見つけるのは非常に困難です。
CPU キャッシュにうまく収まるようにデータを小さくするために CPU サイクルを増やすと、多くのシステムが分散する可能性がありますが、ほとんどのプロファイラーは別の方向を示します。