Windows Phone游戏性能优化之垃圾回收

移动开发
垃圾回收(也称GC)是解决XNA游戏性能问题首先要注意的问题,.net垃圾回收器在windows上表现得令人惊叹,而且大部分情况下你不必理会它。但是在Xbox/Windows Phone 7上,这个情况有所改变。

垃圾回收(也称GC)是解决XNA游戏性能问题首先要注意的问题,.net垃圾回收器在windows上表现得令人惊叹,而且大部分情况下你不必理会它。但是在Xbox/Windows Phone 7上,这个情况有所改变。当你的游戏出现持续掉帧的情况,垃圾回收器可能会让你陷入困境:此时它会在每分配1mb内存的时候被触发一次。

在这里发一些有关XNA垃圾回收的小贴士,如果你的程序性能出现问题了,可以参考的提示。

在屏幕上画出GC.GetTotalMemory()的返回值

这个可以使你监控到你游戏分配内存的近似值。如果这个值变化很慢,那么一切正常,如果增长地很快,你就该把它当issue优化了。

在程序最开始即给你的对象分配空间

如果你不在游戏开始就把一切都分配好空间,当你在游戏时对它们分配空间时就会导致掉帧。道理很简单:No allocations, no collections.

程序初始化加载完毕时,调用GC.Collect().

如果你知道你的大对象已经加载完毕,也让系统知道它。

切忌在每帧调用GC.Collect().

每帧回收看起来是个好主意,可以时刻让你的内存处于***化的利用率。但是有一点要记住:比垃圾回收更糟糕的是过量地垃圾回收。

找出你的垃圾从何而来

有几个典型的例子产生垃圾:使用string进行字符串串联操作(这里你可能会想到Stringbuilder,但是它也可能会导致巨量的内存分配,理性地使用它们吧),在集合中使用 foreach遍历对象也可能会在你不知道的情况下触发垃圾回收(典型的例子:foreach (EffectPass pass in effect.CurrentTechnique.Passes))。

使用CLR性能监视工具:CLRmemory profiler

在你使用了非托管资源的类中使用IDisposable

这么做了,你就可以回收掉GC不能回收的内存。

【编辑推荐】

  1. 详解Windows Phone XNA 4.0 3D游戏开发
  2. 从构思到发布 开发Windows Phone 7小游戏
  3. MonoGame:iOS、Android和WP的.Net游戏开发工具
责任编辑:王晓东 来源: 百度文库
相关推荐

2015-09-16 10:13:16

游戏性能

2023-04-20 10:25:49

微软Windows

2023-08-08 10:29:55

JVM优化垃圾回收

2009-07-01 16:20:34

Flex垃圾回收性能优化

2010-05-04 14:50:18

Ubuntu 10.0Windows 7

2019-08-13 07:10:52

GameModeLinux游戏性能

2021-10-06 14:07:16

Windows 11微软Win10

2023-08-13 16:49:54

2023-05-25 20:06:17

Linux游戏性能

2010-08-06 15:44:28

Windows PhoWindows PhoSilverlight

2021-12-01 23:01:29

Windows 10Windows微软

2022-02-18 09:43:43

Windows 游戏操作系统Windows11

2022-01-20 10:34:49

JVM垃圾回收算法

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2021-07-15 11:12:44

Windows 10操作系统微软

2022-10-08 07:24:26

Windows 11微软Windows

2021-04-25 05:42:29

Windows10操作系统微软

2013-03-11 13:33:54

笔记本

2022-12-07 09:26:17

微软Windows

2022-12-16 13:16:47

点赞
收藏

51CTO技术栈公众号