long 返回一个长整型值,表示正在使用的内存。
获取活动对象和未收集对象的已分配托管内存。
该函数返回所有对象(活动和未收集对象)的已分配托管内存大小。始终在调用该函数之前调用 GC.Collect,因为未引用的对象在垃圾回收器 (GC) 收集它们之前仍会占据空间。在调用 GC.Collect 之前,输出是一个不断增长的值。
Profiler.GetMonoHeapSizeLong 的大小可能会在后续 GC.Collect 调用之后减小,如果第一个 GC.Collect 调用收集了堆段中的所有剩余对象。分配新内存也可能会隐式重新触发 GC.Collect,如果它发现自第一次调用后还有更多已准备就绪的要收集的对象,它会进一步降低 Profiler.GetMonoUsedSizeLong 返回的值。此外,Unity 可能会在线程上分配托管内存,或者线程代码可能会摆脱指向托管分配的指针,因此虽然看起来在两次测量点之间没有任何代码应该改变托管分配的数量,但事实并非总是如此。
using UnityEngine; using System.Collections; using UnityEngine.Profiling;
class GetMonoExample : MonoBehaviour { void Update() { System.GC.Collect(); System.GC.WaitForPendingFinalizers(); Debug.Log("Mono used size" + Profiler.GetMonoUsedSizeLong() + "Bytes"); } }