Unity中内存资源释放总结
2017-10-16 18:26
323 查看
Unity内存释放 问题主要考虑一下几个方面:
Resources 加载的资源需要释放的时候调用 Resources.UnloadUnusedAssets();
WWW 加载资源之后最好调用WWW的Dispose接口
创建的RenderTexture必须调用Release接口
必须用Xcode联机调试确定C++层有没有内存泄漏
AssetBundle资源在Unity Profile中的Scene Memory不会显示,可以通过Xcode联机调试确定有没有释放完全
加载资源和卸载资源的异步处理,避免同一帧内加载过多资源导致内存瞬间增大从而导致Crash(低配机器上表现更明显)
一般通过WWW加载一张Texture来通过Image显示的话,有一个方法是使用Texture通过Sprite.Create来创建一个Sprite对象赋值给Image.overrideSprite完成显示。但是需要注意一个问题,Sprite.Create创建对象对拷贝Texture中数据,并生成一个新的Sprite对象,这样会造成耗费最少2倍(如果要获取MipMap则会更大)Texture大小的内存,而且这个内存占用不会随着Image的销毁而马上销毁,直到调用Resources.UnloadUnusedResources()才会销毁。如果在一个场景中有大量的图片需要动态加载的话,那么必须注意内存问题了。所以建议不要使用显示Image的方式,有一种方式是显示RawImage,按照官方文档的描述:
The Raw Image control displays a non-interactive image to the user. This can be used for decoration, icons, etc, and the image can also be changed from a script to reflect changes in other controls.
RawImage是一个没有和用户交互的Image,所以如果我们不需要比如事件这种交互的操作的话,还是建议用RawImage来显示Texture。RawImage的方式会高效很多,如果从AssetBundle里面加载了一张Texture,不管是赋值给多少个RawImage,Texture是公用的,只会有一份内存。
Resources 加载的资源需要释放的时候调用 Resources.UnloadUnusedAssets();
WWW 加载资源之后最好调用WWW的Dispose接口
创建的RenderTexture必须调用Release接口
必须用Xcode联机调试确定C++层有没有内存泄漏
AssetBundle资源在Unity Profile中的Scene Memory不会显示,可以通过Xcode联机调试确定有没有释放完全
加载资源和卸载资源的异步处理,避免同一帧内加载过多资源导致内存瞬间增大从而导致Crash(低配机器上表现更明显)
一般通过WWW加载一张Texture来通过Image显示的话,有一个方法是使用Texture通过Sprite.Create来创建一个Sprite对象赋值给Image.overrideSprite完成显示。但是需要注意一个问题,Sprite.Create创建对象对拷贝Texture中数据,并生成一个新的Sprite对象,这样会造成耗费最少2倍(如果要获取MipMap则会更大)Texture大小的内存,而且这个内存占用不会随着Image的销毁而马上销毁,直到调用Resources.UnloadUnusedResources()才会销毁。如果在一个场景中有大量的图片需要动态加载的话,那么必须注意内存问题了。所以建议不要使用显示Image的方式,有一种方式是显示RawImage,按照官方文档的描述:
The Raw Image control displays a non-interactive image to the user. This can be used for decoration, icons, etc, and the image can also be changed from a script to reflect changes in other controls.
RawImage是一个没有和用户交互的Image,所以如果我们不需要比如事件这种交互的操作的话,还是建议用RawImage来显示Texture。RawImage的方式会高效很多,如果从AssetBundle里面加载了一张Texture,不管是赋值给多少个RawImage,Texture是公用的,只会有一份内存。
相关文章推荐
- C#内存泄露与资源释放 经验总结
- 总结PHP内存释放以及垃圾回收
- Unity 相关经典博客资源总结(持续更新)
- Unity 相关经典博客资源总结(持续更新)
- Unity资源加载与释放
- cocos2d 释放资源 总结
- 总结一下函数开始分配资源怎么在多条件返回时释放资源
- 关于DI容器UnityContainer的Dispose方法释放资源的一点理解
- IOS OC内存堆资源使用总结
- Unity 3D 资源的加载与释放
- atitit.资源释放机制--attilax总结
- cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法 以及释放问题
- 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏
- 【巧用自带清空内存命令 一键释放内存资源】
- Unity 相关经典博客资源总结(持续更新)
- Unity内存申请和释放
- Unity 相关经典博客资源总结
- Delphi从内存加载dll,无需从资源中释放dll
- atitit.资源释放机制--attilax总结
- 简单总结Unity使用Resources类资源管理