loading请求处理中...

解决XNA游戏性能问题 垃圾回收GC处理方法

2021-12-01 02:24:20 阅读 10730次 标签: 开发 作者: anyi
    在为 Windows Phone 手机创建应用时,需要重点考虑性能。与台式机或便携式 PC 相比,Windows Phone 手机的中央处理单元 (CPU) 和图形处理单元 (GPU) 有限。为了在 Windows Phone 上优化应用包括游戏的性能,对 XAML 处理图形和其他对象的方式做出了一些更改。
解决XNA游戏性能问题
    垃圾回收(也称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不能回收的内存。
    Windows Phone 是资源有限的设备。我们必须考虑电池使用时间、CPU/GPU 的处理能力、连接性、带宽、存储容量、多任务模型以及windows phone软件可以在其中运行的内存量。Windows Phone 的设计很注重性能,而且对于创建具有更高性能的平台也非常谨慎。
(一品威客 anyi) 

APP开发公司推荐

成为一品威客服务商,百万订单等您来有奖注册中

留言( 展开评论

快速发任务

价格是多少?怎样找到合适的人才?

官方顾问免费为您解答

 
APP开发相关任务
DESIGN TASK 更多
桌面应用程序开发

¥50000 已有0人投标

招商引资APP开发

¥20000 已有0人投标

APP原生开发

¥20000 已有1人投标

开发ai拍照软件

¥100 已有2人投标