提交 f081aa19 编写于 作者: O oceanxiao

add memoryprofiler

上级 bc9e34c6
......@@ -53,7 +53,7 @@ Unity WebGL是以WebAssembly+WebGL技术为基础的应用,运行在浏览器
进程级别: Perfdog、Android Studio、 Mac Xcode Instrument
UnityHeap(CPU主内存): 性能面板、MemoryProfiler、JavaScript Heap
UnityHeap(CPU主内存): 性能面板、ProfilingMemory、JavaScript Heap
引擎与资源:UnityProfiler
......@@ -111,10 +111,10 @@ Unity引擎视角:
- 白色为预留部分,可被使用
- 其他颜色,已被业务使用
### 3.3 MemoryProfiler
MemoryProfiler可以分析UnityHeap底层分配器的分配细节,任何分配都会产生记录,因此我们可以通过该能力分析更详细具体的分配行为。
### 3.3 ProfilingMemory
ProfilingMemory可以分析UnityHeap底层分配器的分配细节,任何分配都会产生记录,因此我们可以通过该能力分析更详细具体的分配行为。
关于该能力的使用请查阅[使用MemoryProfiler分析内存](UsingMemoryProfiler.md)
关于该能力的使用请查阅[使用ProfilingMemory分析内存](UsingMemoryProfiler.md)
### 3.4 Unity Profiler
当发现UnityHeap(尤其是Native)占用比较高时,可通过UnityProfiler进一步分析问题所在。关于该工具在微信小游戏的使用请查阅[使用 Unity Profiler 性能调优](UnityProfiler.md),推荐使用Unity InstantGame版本增强的Profiler功能,下载地址请查阅[推荐引擎版本](UnityVersion.md)
......
# 使用MemoryProfiler内存分析
# 使用ProfilingMemory内存分析
## 概述
利用MemoryProfiler,我们可以分析UnityHeap(CPU主内存)的详细分配堆栈与统计数值
利用ProfilingMemory,我们可以分析UnityHeap(CPU主内存)的详细分配堆栈与统计数值
## 步骤
1. 导出选项时勾选"Profiling Funcs"与"Profiling Memory"
......@@ -56,4 +56,36 @@ Unity 2021:
Other: select * from alloc_used where callback not like "%xxx%" or callback not like "%xxx%"
```
## 常见问题
### 1. 开启ProflingMemory后非常慢,特别是在有Lua逻辑的情况
- 首先,这是正常情况,因为每次分配内存都会获取堆栈信息导致运行慢
- Lua会存在大量分配行为,会加重这个问题, 因此我们提供了专门的内存分配器忽略Lua内存,具体做法:
1.[simpledlmalloc.c](../tools/simpledlmalloc.c)添加到xLua虚拟机源码目录下参与编译,(和lauxlib.c同一目录)
2. 参考[lauxlib.c](../tools/lauxlib.c),在lua源码目录下的同名文件中增加`simple_dlmalloc`,并修改`LUALIB_API lua_State *luaL_newstate (void)` 为如下所示
```C
#include "simpledlmalloc.c"
static void *simple_dlmalloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud; (void)osize; /* not used */
if (nsize == 0) {
dlfree(ptr);
return NULL;
}
else
return dlrealloc(ptr, nsize);
}
// using other_alloc instead of default dlmalloc to avoid print trace of lua
LUALIB_API lua_State *luaL_newstate (void) {
// lua_State *L = lua_newstate(l_alloc, NULL);
lua_State *L = lua_newstate(simple_dlmalloc, NULL);
if (L) lua_atpanic(L, &panic);
return L;
}
```
### 2. ProfilingMemory在真机上更容易出现内存崩溃
- ProfilingMemory功能需要额外的内存记录堆栈与相关统计,因此JS侧内存压力会更大
- 不建议在真机上使用该功能,只需要在微信开发者工具上进行分析即可,UnityHeap(CPU主内存)在不同端上的行为基本是一致的
......@@ -62,7 +62,7 @@
- [使用 Android CPU Profiler 性能调优](Design/AndroidProfile.md)
- [使用 Unity Profiler 性能调优](Design/UnityProfiler.md)
- [优化Unity WebGL的内存](Design/OptimizationMemory.md)
- [使用MemoryProfiler分析内存](Design/UsingMemoryProfiler.md)
- [使用ProfilingMemory分析内存](Design/UsingMemoryProfiler.md)
- [音频适配优化](Design/AudioOptimization.md)
- [压缩纹理优化](Design/CompressedTexture.md)
- [资源优化工具与建议](Design/AssetOptimization.md)
......
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册