我知道的所有 .net 分析器都没有考虑 CPU 缓存的影响。
鉴于从 CPU 缓存中读取字段比从主内存中读取字段快 100 倍,这可能是一个很大的因素。(我只需要在答案中解释这一点)
我见过太多人花很长时间来加速分析器认为很慢的循环,而在现实生活中,cpu 缓存使它们变得更快。
例如,我希望能够查看数据访问是否大量缺少 cpu 缓存,以及获得我可以更信任的基本分析结果。
在过去,我发现通过使我的数据更加紧凑,它会全部放入 CPU 缓存中,或者更改数据访问的其他数据会产生很大的影响。例如
AccessArrarFromStartAndDoSomething()
AccessArrayFromEndAndDoSomethingElse()
那么更好
AccessArrarFromStartAndDoSomething()
AccessArrayStartEndAndDoSomethingElse()
如果阵列不适合 CPU 缓存,但很难找到这种类型的改进。
花费更多的 cpu 周期来使数据更小,以便更好地适应 CPU 缓存可以分散很多系统,但大多数分析器会将您指向另一个方向。