内存泄露和优化

内存泄露和优化




======================概述

通过UnityEngine命名空间中的接口分配的内存,将会通过Unity分配在Native堆
通过System命名空间中的接口分配的内存,将会通过Mono Runtime分配在Mono堆


Resources.UnloadUnusedAssets()//内部包括gc
GC.Collect()



Mono内存分为两部分,已用内存(used)和堆内存(heap),
已用内存指的是mono实际需要使用的内存,
堆内存指的是mono向操作系统申请的内存,两者的差值就是mono的空闲内存。

当mono需要分配内存时,会先查看空闲内存是否足够,
如果足够的话,直接在空闲内存中分配,
否则mono会进行一次GC以释放更多的空闲内存,

如果GC之后仍然没有足够的空闲内存,则mono会向操作系统申请内存,并扩充堆内存



=====================解决

常用字符串进行缓存
使用stringbuild
GetComponent 只在onstart用并且存起来
使用comparetag




Resources.FindObjectsOfTypeAll()进行资源的Dump,可以根据需求Dump贴图、材质、模型或其他资源类型,只需要将Type作为参数传入即可。Dump

成功之后我们将结果保存成一份文本文件,这样可以用Beyond Compare对多次Dump之后的结果进行比较,找到新增的资源,那么这些资源就是潜在的

泄漏对象,需要重点追查。



wetest(apk,上传apk,cube(免root))
===
uwa
===
Unity eaglEEye 性能分析平台应用案例
===
bugly
===
github unity- memory profiler
===
assetbundle browser





=====================引用


相信各位程序猿们或多或少都会听到过内存泄漏这个名词,但是对于一些新手猿来说,或许不是很了解。内存泄漏?是内存漏出来了么?和霸气侧漏

一样么?让我们先来看一下wikipedia的定义
https://blog.csdn.net/wetest_tencent/article/details/52318607

====

猜你喜欢

转载自blog.csdn.net/a133900029/article/details/80184293