组件功能

allocationstats是一个简单的辅助工具,用于显示您的应用程序分配多少内存。它采用GC.GetTotalMemory来跟踪内存使用

使用方法

添加 Allocmem.cs 到场景中的任何GameObject。当你按下播放按钮,会显示一个小窗口包含以下信息。

Currently allocated(当前分配):显示GC分配的总内存

Peak allocated(峰值):显示了内存分配,()内的值是GC最后一次应用程序运行期间分配的最大内存

Allocation rate(分配率):显示了应用程序分配内存(以mb为单位),比如 0.3秒MB内存分配,在这个时候我应该修复。

Allocation rate(收集次数/频率):显示相距多远GC的集合间隔(秒)

Last collect delta(最后收集):显示帧率有多高,当GC上次调用,调用GC通常使帧率下降。

AllocMem.cs

using UnityEngine;
using System.Collections;
using System.Text; [ExecuteInEditMode()]////使这个脚本在编辑模式下运行
public class AllocMem : MonoBehaviour
{ public bool show = true;
public bool showFPS = false;
public bool showInEditor = false;
public void Start()
{
useGUILayout = false;
} // Use this for initialization
public void OnGUI()
{
if (!show || (!Application.isPlaying && !showInEditor))
{
return;
} int collCount = System.GC.CollectionCount(0); if (lastCollectNum != collCount)
{
lastCollectNum = collCount;
delta = Time.realtimeSinceStartup - lastCollect;
lastCollect = Time.realtimeSinceStartup;
lastDeltaTime = Time.deltaTime;
collectAlloc = allocMem;
} allocMem = (int)System.GC.GetTotalMemory(false); peakAlloc = allocMem > peakAlloc ? allocMem : peakAlloc; if (Time.realtimeSinceStartup - lastAllocSet > 0.3F)
{
int diff = allocMem - lastAllocMemory;
lastAllocMemory = allocMem;
lastAllocSet = Time.realtimeSinceStartup; if (diff >= 0)
{
allocRate = diff;
}
} StringBuilder text = new StringBuilder(); text.Append("Currently allocated ");
text.Append((allocMem / 1000000F).ToString("0"));
text.Append("mb\n"); text.Append("Peak allocated ");
text.Append((peakAlloc / 1000000F).ToString("0"));
text.Append("mb (last collect ");
text.Append((collectAlloc / 1000000F).ToString("0"));
text.Append(" mb)\n"); text.Append("Allocation rate ");
text.Append((allocRate / 1000000F).ToString("0.0"));
text.Append("mb\n"); text.Append("Collection frequency ");
text.Append(delta.ToString("0.00"));
text.Append("s\n"); text.Append("Last collect delta ");
text.Append(lastDeltaTime.ToString("0.000"));
text.Append("s (");
text.Append((1F / lastDeltaTime).ToString("0.0")); text.Append(" fps)"); if (showFPS)
{
text.Append("\n" + (1F / Time.deltaTime).ToString("0.0") + " fps");
} GUI.Box(new Rect(5, 5, 310, 80 + (showFPS ? 16 : 0)), "");
GUI.Label(new Rect(10, 5, 1000, 200), text.ToString());
/*GUI.Label (new Rect (5,5,1000,200),
"Currently allocated "+(allocMem/1000000F).ToString ("0")+"mb\n"+
"Peak allocated "+(peakAlloc/1000000F).ToString ("0")+"mb "+
("(last collect"+(collectAlloc/1000000F).ToString ("0")+" mb)" : "")+"\n"+
"Allocation rate "+(allocRate/1000000F).ToString ("0.0")+"mb\n"+
"Collection space "+delta.ToString ("0.00")+"s\n"+
"Last collect delta "+lastDeltaTime.ToString ("0.000") + " ("+(1F/lastDeltaTime).ToString ("0.0")+")");*/
} private float lastCollect = 0;
private float lastCollectNum = 0;
private float delta = 0;
private float lastDeltaTime = 0;
private int allocRate = 0;
private int lastAllocMemory = 0;
private float lastAllocSet = -9999;
private int allocMem = 0;
private int collectAlloc = 0;
private int peakAlloc = 0; }

WIKI地址

http://wiki.unity3d.com/index.php/AllocationStats

Unity-WIKI 之 AllocationStats(内存分配)的更多相关文章

  1. 内存管理 垃圾回收 C语言内存分配 垃圾回收3大算法 引用计数3个缺点

    小结: 1.垃圾回收的本质:找到并回收不再被使用的内存空间: 2.标记清除方式和复制收集方式的对比: 3.复制收集方式的局部性优点: https://en.wikipedia.org/wiki/C_( ...

  2. [转]全面理解Unity加载和内存管理

    [转]全面理解Unity加载和内存管理 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质 ...

  3. Unity 3D中的内存管理

    本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/ Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备 ...

  4. 全面理解Unity加载和内存管理

     全面理解Unity加载和内存管理http://game.ceeger.com/forum/read.php?tid=4394&fid=2&uid=6507 1.用简单的“for”循环 ...

  5. java 内存分配全面解析

    JVM是什么? 首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上;可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了 Java的平台无 ...

  6. Java虚拟机内存分配详解

    简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数 ...

  7. JVM-垃圾收集算法、垃圾收集器、内存分配和收集策略

    对象已死么? 判断一个对象是否存活一般有两种方式: 1.引用计数算法:每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1.计数为0时可以回收. 2.可达性分析算法(Reachab ...

  8. 【Unity】开发WebGL内存概念具体解释和遇到的问题

    自增加unity WebGL平台以来.Unity的开发团队就一直致力于优化WebGL的内存消耗. 我们已经在Unity使用手冊上有对于WebGL内存管理的详尽分析,甚至在Unite Europe 20 ...

  9. 使用TryGetComponent取代GetComponent以避免Editor中的内存分配

    作为Unity开发人员,可能或多或少都会遇到过一个常见的Unity的GC分配问题——在Editor中使用GetComponent方法来获取一个不存在的Component时会分配额外的内存.就像下图 需 ...

随机推荐

  1. Android笔记——Android中数据的存储方式(一)

    Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...

  2. Javascript-回调函数浅谈

    回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...

  3. Device Channels in SharePoint 2013

    [FROM:http://blog.mastykarz.nl/device-channels-sharepoint-2013/] One of the new features of SharePoi ...

  4. R语言学习笔记:因子

    R语言中的因子就是factor,用来表示分类变量(categorical variables),这类变量不能用来计算而只能用来分类或者计数. 可以排序的因子称为有序因子(ordered factor) ...

  5. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  6. 弃用的异步get和post方法之代理方法

    #import "ViewController.h" #import "Header.h" @interface ViewController () <N ...

  7. 我遇到的CocoaPods的问题(也许后期会解决,持续更新)

    在此博客中写下两类关于CocoaPods的问题: 未解决的问题:可以留着以后解决 已经解决的问题:可以备份以后回头再参考解决同样的问题 <已解决的问题> 解决方法是:pod install ...

  8. IOS之UI -- UITableView -- 1 -- 相关初识

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. 基于AFNetWorking封装一个网络请求数据的类

    1.新建一个继承于NSObject类的类,在.h文件中 #import "AFHTTPRequestOperationManager.h" //定义两个block来接收请求成功和失 ...

  10. 数据库测试DbUnit

    DBUnit 的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态: 摘自:DbUnit入门实战 DBUnit官网:ht ...