Unity 分析我的脚本的内存使用情况
Unity profiling my scripts' memory usage
我在 运行 玩游戏时查看了分析器,我可以在那里看到一大堆东西 - 但看不到我的脚本的内存使用情况。事情是,我的游戏的总内存分配是 223 MB,但纹理只有 112 MB,除此之外我看到了一两个 MB。我不知道我的其他 100 MB 内存去了哪里,我想稍微优化一下我的脚本。旁注:我使用 Visual Studio 编码。也许我应该去那里看看?
以下是我在 Unity 中发布应用程序时学到的一些内存分析技巧。
GC 分配
在 Unity Profiler 的 CPU 使用情况视图中 window 您可以看到您的脚本在任何给定帧中分配了多少内存。这显示在 GC Alloc(垃圾收集分配)列中。
这不会为您提供单个脚本的总内存使用量,但对于提高性能和内存消耗非常有用。如果您的脚本分配每一帧,内存将继续累积,直到垃圾收集器被触发。这种积累会增加您的内存占用量,并且 运行 GC 会导致性能下降。
查看此处了解更多信息:https://docs.unity3d.com/Manual/ProfilerCPU.html
内存视图
Unity Profiler 的详细内存视图 Window 告诉您游戏中加载的任何内容(包括大量 built-in 资产)的内存使用情况。这将使您能够识别哪些纹理、网格或其他资产过大。当您在此视图中查看资产时,它会告诉您它在场景中的何处被引用,这可以帮助您确定哪些游戏对象可能使用了太多内存。
此视图的一个问题是许多资产显示为空白,因为它们没有名称。当您在脚本中创建资产(纹理、网格等)时会发生这种情况。您可以通过设置您创建的任何资产的 .name
属性 来更改此设置。然后,这将显示在内存分析器中 window。
查看此处了解更多信息:https://docs.unity3d.com/Manual/ProfilerMemory.html
构建报告
执行构建(独立、Windows 商店等)后,编辑器日志中会生成构建报告。它可能很难找到,但它提供了很多关于哪些资产对您的构建大小有贡献的有用信息。需要记住的一件事是,此报告使用 未压缩 资源大小,因此许多类型的资源(尤其是纹理)实际上最终会比此处显示的要小。在控制台 window 的 upper-right 角落,有一个 drop-down 菜单用于打开编辑器日志。您感兴趣的部分将如下所示:
Textures 0.0 kb 0.0%
Meshes 0.0 kb 0.0%
Animations 0.0 kb 0.0%
Sounds 0.0 kb 0.0%
Shaders 18.6 kb 0.4%
Other Assets 0.7 kb 0.0%
Levels 5.2 kb 0.1%
Scripts 460.8 kb 10.2%
Included DLLs 3.9 mb 89.1%
File headers 8.4 kb 0.2%
Complete size 4.4 mb 100.0%
Used Assets and files from the Resources folder, sorted by uncompressed size:
18.9 kb 0.4% Resources/unity_builtin_extra
4.0 kb 0.1% ...UnityEngine.UI.dll
1.8 kb 0.0% ...UnityEngine.Networking.dll
0.1 kb 0.0% ...UnityEngine.Advertisements.dll
0.1 kb 0.0% ...UnityEngine.Purchasing.dll
0.1 kb 0.0% Assets/TestClass.cs
0.1 kb 0.0% Assets/MemoryTester.cs
0.1 kb 0.0% Assets/Rotator.cs
对于懒惰的人,资产商店中有一个 Unity 插件可以为您解析:https://www.assetstore.unity3d.com/en/#!/content/8162
(我既没有使用过这个插件,也没有认可它的使用)
System.GC.GetTotalMemory
如果您在 Windows 台式电脑上开发,您可以使用 System.GC.GetTotalMemory(...)
向系统询问它认为分配给您的应用程序的内存量。您可能对它报告的实际数字不感兴趣,但如果您在应用程序的不同位置调用此函数,您可以看到总内存使用量何时上升。例如,您可以在一大块初始化之前调用 GetTotalMemory
,然后在初始化结束时再次调用。比较这两个数字可以估算出您的记忆力增长了多少*
*它可能不完全准确,因为后台正在进行的进程(如 GC)可能会影响此数字
查看此处了解更多信息:https://msdn.microsoft.com/en-us/library/system.gc(v=vs.110).aspx
希望这对您有所帮助!!
我在 运行 玩游戏时查看了分析器,我可以在那里看到一大堆东西 - 但看不到我的脚本的内存使用情况。事情是,我的游戏的总内存分配是 223 MB,但纹理只有 112 MB,除此之外我看到了一两个 MB。我不知道我的其他 100 MB 内存去了哪里,我想稍微优化一下我的脚本。旁注:我使用 Visual Studio 编码。也许我应该去那里看看?
以下是我在 Unity 中发布应用程序时学到的一些内存分析技巧。
GC 分配
在 Unity Profiler 的 CPU 使用情况视图中 window 您可以看到您的脚本在任何给定帧中分配了多少内存。这显示在 GC Alloc(垃圾收集分配)列中。
这不会为您提供单个脚本的总内存使用量,但对于提高性能和内存消耗非常有用。如果您的脚本分配每一帧,内存将继续累积,直到垃圾收集器被触发。这种积累会增加您的内存占用量,并且 运行 GC 会导致性能下降。
查看此处了解更多信息:https://docs.unity3d.com/Manual/ProfilerCPU.html
内存视图
Unity Profiler 的详细内存视图 Window 告诉您游戏中加载的任何内容(包括大量 built-in 资产)的内存使用情况。这将使您能够识别哪些纹理、网格或其他资产过大。当您在此视图中查看资产时,它会告诉您它在场景中的何处被引用,这可以帮助您确定哪些游戏对象可能使用了太多内存。
此视图的一个问题是许多资产显示为空白,因为它们没有名称。当您在脚本中创建资产(纹理、网格等)时会发生这种情况。您可以通过设置您创建的任何资产的 .name
属性 来更改此设置。然后,这将显示在内存分析器中 window。
查看此处了解更多信息:https://docs.unity3d.com/Manual/ProfilerMemory.html
构建报告
执行构建(独立、Windows 商店等)后,编辑器日志中会生成构建报告。它可能很难找到,但它提供了很多关于哪些资产对您的构建大小有贡献的有用信息。需要记住的一件事是,此报告使用 未压缩 资源大小,因此许多类型的资源(尤其是纹理)实际上最终会比此处显示的要小。在控制台 window 的 upper-right 角落,有一个 drop-down 菜单用于打开编辑器日志。您感兴趣的部分将如下所示:
Textures 0.0 kb 0.0%
Meshes 0.0 kb 0.0%
Animations 0.0 kb 0.0%
Sounds 0.0 kb 0.0%
Shaders 18.6 kb 0.4%
Other Assets 0.7 kb 0.0%
Levels 5.2 kb 0.1%
Scripts 460.8 kb 10.2%
Included DLLs 3.9 mb 89.1%
File headers 8.4 kb 0.2%
Complete size 4.4 mb 100.0%
Used Assets and files from the Resources folder, sorted by uncompressed size:
18.9 kb 0.4% Resources/unity_builtin_extra
4.0 kb 0.1% ...UnityEngine.UI.dll
1.8 kb 0.0% ...UnityEngine.Networking.dll
0.1 kb 0.0% ...UnityEngine.Advertisements.dll
0.1 kb 0.0% ...UnityEngine.Purchasing.dll
0.1 kb 0.0% Assets/TestClass.cs
0.1 kb 0.0% Assets/MemoryTester.cs
0.1 kb 0.0% Assets/Rotator.cs
对于懒惰的人,资产商店中有一个 Unity 插件可以为您解析:https://www.assetstore.unity3d.com/en/#!/content/8162
(我既没有使用过这个插件,也没有认可它的使用)
System.GC.GetTotalMemory
如果您在 Windows 台式电脑上开发,您可以使用 System.GC.GetTotalMemory(...)
向系统询问它认为分配给您的应用程序的内存量。您可能对它报告的实际数字不感兴趣,但如果您在应用程序的不同位置调用此函数,您可以看到总内存使用量何时上升。例如,您可以在一大块初始化之前调用 GetTotalMemory
,然后在初始化结束时再次调用。比较这两个数字可以估算出您的记忆力增长了多少*
*它可能不完全准确,因为后台正在进行的进程(如 GC)可能会影响此数字
查看此处了解更多信息:https://msdn.microsoft.com/en-us/library/system.gc(v=vs.110).aspx
希望这对您有所帮助!!