C#中'new'的性能成本?

问题描述 投票:33回答:10

在C#中,使用new关键字的性能成本是多少?我特别问与游戏开发有关的问题,我知道在C ++中每个更新周期都要进行更新是绝对不可以的。同样适用于C#吗?我正在使用XNA并正在为移动设备开发。只是问一个优化问题。

c# performance xna new-operator
10个回答
35
投票

new的成本分为三部分:

  • 分配内存(如果是值类型,则可能不需要)
  • 运行构造函数(取决于您在做什么)
  • 垃圾收集成本(同样,如果是值类型,取决于上下文,这可能不适用)

很难在没有在主代码中创建any新对象的情况下惯用C#,尽管我敢说通过尽可能多地重用对象是可行的。尝试掌握一些真实的设备,并查看游戏的性能。

我当然同意在编程中应该避免像这样的微观优化,但通常比其他地方更适合于游戏循环-因为显然游戏对很小的暂停都非常敏感。但是,很难判断使用更多对象的成本,因为由于GC成本它会随着时间的流逝而扩展。。NET中的分配器和垃圾收集器相当不错,尽管它在设备上可能更简单(我认为是Windows Phone 7)?特别是,我不确定Compact Framework CLR(WP7所使用的一种)是否具有世代GC。


0
投票

19
投票
C#中的分配实际上比C ++中的分配快。它仅涉及增加堆指针并返回该指针。通常,与C ++相比,C#中对象获得newed的频率更高,因为strings之类的东西涉及更多的不变性。

6
投票
新运营商本身的成本可以忽略不计。可能要花费的是自定义构造函数中发生的处理。因此,如果您在此构造方法中发生了很多事情,则可能是一个问题。

5
投票
您应该始终以“最简单”的方式编写代码

然后


3
投票

2
投票

1
投票

1
投票

0
投票
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.