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

垃圾回收(也称GC)是解决XNA游戏性能问题首先要注意的问题,一般情况.net垃圾回收器在windows上运行良好,而且大部分情况下,你都不需要理会它。但是在Xbox/windowsphone7上,这个情况有所改变。当你的游戏出现持续掉帧的情况,垃圾回收器可能会让你陷入困境:此时它会在每分配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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值