zoukankan      html  css  js  c++  java
  • Unity-WIKI 之 AllocationStats(内存分配)

    组件功能

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

    image

    使用方法

    添加 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
    ");
    
            text.Append("Peak allocated                ");
            text.Append((peakAlloc / 1000000F).ToString("0"));
            text.Append("mb (last    collect ");
            text.Append((collectAlloc / 1000000F).ToString("0"));
            text.Append(" mb)
    ");
    
    
            text.Append("Allocation rate                ");
            text.Append((allocRate / 1000000F).ToString("0.0"));
            text.Append("mb
    ");
    
            text.Append("Collection frequency        ");
            text.Append(delta.ToString("0.00"));
            text.Append("s
    ");
    
            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("
    " + (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
    "+
                "Peak allocated                "+(peakAlloc/1000000F).ToString ("0")+"mb "+
                ("(last    collect"+(collectAlloc/1000000F).ToString ("0")+" mb)" : "")+"
    "+
                "Allocation rate                "+(allocRate/1000000F).ToString ("0.0")+"mb
    "+
                "Collection space            "+delta.ToString ("0.00")+"s
    "+
                "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

  • 相关阅读:
    【SQL Server】数据库是单个用户的 无法顺利进行操作 怎么解决
    【java 断点续传】
    【SQL 触发器】
    【SQL 数据库】将一张数据表信息复制到另一张数据表
    【java 获取数据库信息】获取MySQL或其他数据库的详细信息
    【zTree】 zTree使用的 小例子
    【前台 ajax】web项目前台传递数组给后台 两种方式
    【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度
    Linux 在VMware中搭建CentOS6.5虚拟机
    HTML5 Canvas实现360度全景图
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3648902.html
Copyright © 2011-2022 走看看