首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一分析脚本的内存使用情况

统一分析脚本的内存使用情况
EN

Stack Overflow用户
提问于 2017-01-20 17:03:15
回答 1查看 5K关注 0票数 2

在运行我的游戏时,我看了一下分析器,我可以在那里看很多东西--但我的脚本的内存使用情况却不是这样。问题是,我的游戏的总内存分配是223 MB,但纹理只有112和1到2 MB,我看到的除外。我不知道我的其他100 MB内存去了哪里,我想优化一下我的脚本。附带注意:我使用编写代码。也许我该看看那里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-20 19:23:34

这里有几个内存分析提示,我已经从联合发布的应用中学到了。

GC ALLOC

在Unity窗口的CPU使用视图中,您可以看到脚本在任何给定帧中分配了多少内存。这在GC (垃圾收集分配)列中显示。

这不会为您提供单个脚本的内存使用总量,但它对于提高性能和内存消耗非常有用。如果脚本分配每个帧,则内存将继续累积,直到垃圾收集器被触发为止。这种累积会增加内存占用,运行GC会导致性能下降。

有关更多信息,请参见这里:https://docs.unity3d.com/Manual/ProfilerCPU.html

内存视图

Unity窗口的详细内存视图告诉您游戏中加载的任何内容(包括大量内置资产)的内存使用情况。这将使您能够识别哪些纹理、网格或其他资产过大。当您查看此视图中的资产时,它会告诉您在场景中引用它的位置,这可以帮助您识别哪些游戏对象可能使用过多的内存。

这个观点的一个问题是,许多资产都是空白的,因为它们没有名字。当您创建其他资产(纹理、网格等)时,会发生这种情况。在脚本中,您可以通过设置您创建的任何资产的.name属性来更改此属性。这将显示在内存分析器窗口中。

有关更多信息,请参见这里:https://docs.unity3d.com/Manual/ProfilerMemory.html

建设报告

执行构建后(独立、Windows等)在编辑器日志中生成生成报告。它可能很难找到,但它提供了许多良好的信息,哪些资产正在对您的构建规模作出贡献。需要记住的一点是,这个报告使用的是未压缩的非压缩资产大小,因此许多类型的资产(特别是纹理)实际上会比这里显示的要小。在控制台窗口的右上角,有一个下拉菜单来打开编辑器日志。您感兴趣的部分如下所示:

代码语言:javascript
复制
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(...). The向系统询问它认为分配给您的应用程序的内存量--实际上,它的编号--它的报告可能对您不感兴趣,但是如果您在应用程序的各个点对此功能进行调用,则可以看到内存总使用量上升时的情况。例如,您可能会在一个大的初始化块之前调用GetTotalMemory,然后在初始化结束时再次调用。比较这两个数字,你就可以估计出你的记忆增长了多少*

*它可能不完全准确,因为背景中有一些过程,如GC,可能会影响这个数字。

有关更多信息,请参见这里:https://msdn.microsoft.com/en-us/library/system.gc(v=vs.110).aspx

希望这能帮上忙!!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41768846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档