文档

Unity Engine

Unity Engine

双线程分配器

Inspect the usage reports of the dual thread allocator.
阅读时间2 分钟最后更新于 1 个月前

双线程分配器是结合了动态堆和存储桶分配器的封装器。更具体地说,它结合了:
  • 两个动态堆分配器:一个无锁分配器用于主线程,另一个分配器由所有其他线程共享,在分配和取消分配时锁定。Unity 将这些分配器用于对存储桶分配器来说太大的分配。动态堆分配器使用内存块。等于或大于半个内存块的分配将进入虚拟内存系统,而不是动态堆分配器。
  • 用于小型分配的存储桶分配器。如果存储桶分配器已满,分配将溢出到动态堆分配器中。
您可以自定义两个动态堆分配器的内存块大小:

主分配器,共享线程内存块大小为自定义值

使用情况报告包含分配器总共三个部分的信息。例如:
[ALLOC_DEFAULT] Dual Thread Allocator Peak main deferred allocation count 135 [ALLOC_BUCKET] Large Block size 4.0 MB Used Block count 1 Peak Allocated bytes 3.3 MB [ALLOC_DEFAULT_MAIN] Peak usage frame count: [16.0 MB-32.0 MB]: 8283 frames, [32.0 MB-64.0 MB]: 1 frames Requested Block Size 16.0 MB Peak Block count 2 Peak Allocated memory 53.3 MB Peak Large allocation bytes 40.2 MB [ALLOC_DEFAULT_THREAD] Peak usage frame count: [64.0 MB-128.0 MB]: 8284 frames Requested Block Size 16.0 MB Peak Block count 2 Peak Allocated memory 78.3 MB Peak Large allocation bytes 47.3 MB
注意:峰值主延迟分配计数 (Peak main deferred allocation count) 是删除队列中的项数。主线程必须删除其所做的任何分配。如果另一个线程删除分配,则该分配将添加到队列中。分配在队列中等待主线程将其删除。然后,该分配被视为延迟分配并计数。