小编Gér*_*ino的帖子

C#中的内存布局优化

免责声明:下面的措辞中可能存在一些误解,请纠正我,如果我误解了我的代码是在C#处理的那一刻我写的那一刻它看起来像零和一个

问题如下(这些是相关的):

在C#中我的数据结构和/或我的数据操作实现是否有任何方式,无论我是否使用优化技术都会对性能产生影响?

输出IL时编译器做了什么,它可靠吗?含义:如果我创建数据SOA将是IL中的SOA吗?总是?

当JIT读取IL时,我的数据结构会发生什么?它改变了吗?它是否自动优化以适合我的处理器?

cf:谈论C/C++

我知道这个演讲的目标是本机代码,并讨论处理器布局的细节与本机代码中的数据布局.

我也知道C#编译器和JIT编译器会针对这些问题优化我的东西.

基本上我想知道这些优化是否会对我的性能产生影响:

  • SOA而不是AOS
  • 向量访问模式(在内存中连续访问)
  • 等等......你说出来......

我从事游戏开发工作并且性能至关重要,我们操作大量数据并且我们需要每秒至少执行24次,我不能让GC执行300毫秒的操作或者当我在任何地方访问/分配内存时试图检测3000个不同物体之间的碰撞

关于我读过的东西的参考,但没有真正回答这个问题:

但是那些没有回答相对于处理器和数据布局实现的性能成本.


在汉斯回答之后要走得更远:

当你说:"你可以追求SOA,但这没有帮助.是的,你的程序会因为所有结构复制而减速,并且以确定的方式这样做.但它并没有阻止下雨.你得到了最糟糕的两个,一个缓慢的程序和完全相同的停顿."

这并不意味着我的程序不会从SOA中获益,它会更快(可能),因为它将有助于处理我的数据.只是它本身对GC没有影响.

另一件事是,如果我不在我的数据布局中进行SOA或其他改进,编译器对我来说不会改进吗?我不能依靠编译器来处理那种事情?

c# memory optimization performance jit

9
推荐指数
1
解决办法
744
查看次数

标签 统计

c# ×1

jit ×1

memory ×1

optimization ×1

performance ×1