Windows Phone游戏性能优化之垃圾回收
2012-05-13 13:56
197 查看
垃圾回收(也称GC)是解决XNA游戏性能问题首先要注意的问题,.net垃圾回收器在windows上表现得令人惊叹,而且大部分情况下你不必理会它。但是在Xbox/windowsphone7上,这个情况有所改变。当你的游戏出现持续掉帧的情况,垃圾回收器可能会让你陷入困境:此时它会在每分配1mb内存的时候被触发一次。
在这里发一些有关XNA垃圾回收的小贴士,如果你的程序性能出现问题了,可以参考的提示。
在屏幕上画出GC.GetTotalMemory()的返回值。
这个可以使你监控到你游戏分配内存的近似值。如果这个值变化很慢,那么一切正常,如果增长地很快,你就该把它当issue优化了。
在程序最开始即给你的对象分配空间。
如果你不在游戏开始就把一切都分配好空间,当你在游戏时对它们分配空间时就会导致掉帧。道理很简单:No allocations, no collections.
程序初始化加载完毕时,调用GC.Collect().
如果你知道你的大对象已经加载完毕,也让系统知道它。
切忌在每帧调用[b]GC.Collect().[/b]
每帧回收看起来是个好主意,可以时刻让你的内存处于最优化的利用率。但是有一点要记住:比垃圾回收更糟糕的是过量地垃圾回收。
找出你的垃圾从何而来。
有几个典型的例子产生垃圾:使用string进行字符串串联操作(这里你可能会想到Stringbuilder,但是它也可能会导致巨量的内存分配,理性地使用它们吧),在集合中使用
foreach遍历对象也可能会在你不知道的情况下触发垃圾回收(典型的例子:foreach (EffectPass pass in effect.CurrentTechnique.Passes))。
使用CLR性能监视工具:CLRmemory profiler。
在你使用了非托管资源的类中使用IDisposable。
这么做了,你就可以回收掉GC不能回收的内存。
在这里发一些有关XNA垃圾回收的小贴士,如果你的程序性能出现问题了,可以参考的提示。
在屏幕上画出GC.GetTotalMemory()的返回值。
这个可以使你监控到你游戏分配内存的近似值。如果这个值变化很慢,那么一切正常,如果增长地很快,你就该把它当issue优化了。
在程序最开始即给你的对象分配空间。
如果你不在游戏开始就把一切都分配好空间,当你在游戏时对它们分配空间时就会导致掉帧。道理很简单:No allocations, no collections.
程序初始化加载完毕时,调用GC.Collect().
如果你知道你的大对象已经加载完毕,也让系统知道它。
切忌在每帧调用[b]GC.Collect().[/b]
每帧回收看起来是个好主意,可以时刻让你的内存处于最优化的利用率。但是有一点要记住:比垃圾回收更糟糕的是过量地垃圾回收。
找出你的垃圾从何而来。
有几个典型的例子产生垃圾:使用string进行字符串串联操作(这里你可能会想到Stringbuilder,但是它也可能会导致巨量的内存分配,理性地使用它们吧),在集合中使用
foreach遍历对象也可能会在你不知道的情况下触发垃圾回收(典型的例子:foreach (EffectPass pass in effect.CurrentTechnique.Passes))。
使用CLR性能监视工具:CLRmemory profiler。
在你使用了非托管资源的类中使用IDisposable。
这么做了,你就可以回收掉GC不能回收的内存。
相关文章推荐
- JVM性能优化, Part 3 —— 垃圾回收
- JAVA性能优化及垃圾回收机制
- JVM性能优化, Part 3 垃圾回收
- [Flex]Flex编程注意之性能优化、垃圾回收的一些总结
- Java性能优化之JVM GC(垃圾回收机制)
- 项目优化经验——垃圾回收导致的性能问题
- JVM 性能优化, Part 4: C4 垃圾回收
- JVM 性能优化, Part 4: C4 垃圾回收
- [转]Flex编程注意之性能优化、垃圾回收
- JVM性能优化, Part 3 垃圾回收
- Flex 编程注意之性能优化、垃圾回收的一些总结
- .NET垃圾回收(GC)机制性能优化方案
- Java性能优化之JVM GC(垃圾回收机制)
- JVM优化——针对“垃圾回收”的失效,带来的性能降低和内存溢出
- Java性能优化:垃圾回收(GC) (转文)
- 项目优化经验——垃圾回收导致的性能问题
- 云测试平台, 内存优化,性能优化,OO,。垃圾回收,GC,heap和stack,
- 使用GC Portal 来分析和优化垃圾回收的性能
- Spark性能优化——Java虚拟机垃圾回收调优
- 项目优化经验——垃圾回收导致的性能问题[z]