下文有两个方法,分别是一段检测执行过程耗费时间的代码,还有一个是保存和加载Unity Profiler 的代码(因为UnityProfiler 只能显示一部分的数据,如果运行时间长的话有部分分析数据查看不到)

  

  1. 检测执行耗费时间 代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine; public class CustomTimer : IDisposable
{
private string m_timerName;
private int m_numTests;
private Stopwatch m_watch; public CustomTimer(string timerName,int numTests)
{
m_timerName = timerName;
m_numTests = numTests; if (m_numTests <= 0)
m_numTests = 1;
m_watch = Stopwatch.StartNew();
} public void Dispose()
{
m_watch.Stop();
float ms = m_watch.ElapsedMilliseconds;
UnityEngine.Debug.Log(string.Format("{0} finished: {1:0.00}ms total , {2:0.00000}ms per test for {3} tests", m_timerName, ms, ms / m_numTests, m_numTests));
}
}

使用方法如下: 在程序块里放入自己要检测的代码,在循环使用的时候,把0改成循环的次数就可以了

using (new CustomTimer("My Test", 0))
{
using (UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url))
{
yield return request.SendWebRequest();
if (request.isHttpError || request.isNetworkError)
{
// 下载出错
print(request.error);
}
else
{ // 下载完成
AssetBundle assetBundle = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
GameObject obj = assetBundle.LoadAsset<GameObject>(assetBundle.GetAllAssetNames()[0]); GameObject obj2 = GameObject.Instantiate(obj);
this.obj = obj2.transform;
// 优先释放request 会降低内存峰值
request.Dispose();
}
}
}

2. Unity Profiler 保存方法:

  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Profiling; public class ProfilerDataSaverComponent : MonoBehaviour
{
int _count = 0;
void Start()
{
Profiler.logFile = "";
} // Update is called once per frame
void Update()
{
if(Input.GetKey(KeyCode.LeftControl)&& Input.GetKeyDown(KeyCode.H))
{
StartCoroutine(SaveProfilerData());
}
} IEnumerator SaveProfilerData()
{
while(true)
{
string filepath = Application.persistentDataPath + "/profilerLog" + _count; Profiler.logFile = filepath;
Profiler.enableBinaryLog = true;
Profiler.enabled = true; for (int i = 0; i < 300; i++)
{
yield return new WaitForEndOfFrame();
if(!Profiler.enabled)
{
Profiler.enabled = true; } }
_count++;
}
}
}

  读取保存的UnityProfiler数据: 在Window/ProfilerDataLoader 内

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Profiling; public class ProfilerDataLoaderWindow : EditorWindow
{
static List<string> s_cachedFilePaths;
static int s_chosenIndex = -1;
[MenuItem("Window/ProfilerDataLoader")]
static void Init()
{
ProfilerDataLoaderWindow window = (ProfilerDataLoaderWindow)EditorWindow.GetWindow(typeof(ProfilerDataLoaderWindow));
} static void ReadProfilerDataFiles()
{ Profiler.logFile = "";
string[] filePath = Directory.GetFiles(Application.persistentDataPath , "ProfilerLog*"); s_cachedFilePaths = new List<string>(); Regex test = new Regex(".data$"); for (int i = 0; i < filePath.Length; i++)
{
string thisPath = filePath[i]; Match match = test.Match(thisPath); if(!match.Success)
{
Debug.Log("Found file: " + thisPath); s_cachedFilePaths.Add(thisPath);
}
}
s_chosenIndex = -1;
} private void OnGUI()
{
if(GUILayout.Button("Find Files"))
{
ReadProfilerDataFiles();
} if (s_cachedFilePaths == null)
return; EditorGUILayout.Space();
EditorGUILayout.LabelField("Files");
EditorGUILayout.BeginHorizontal(); GUIStyle defaultStyle = new GUIStyle(GUI.skin.button);
defaultStyle.fixedWidth = 40; GUIStyle highlightedStyle = new GUIStyle(defaultStyle);
highlightedStyle.normal.textColor = Color.red; for (int i = 0; i < s_cachedFilePaths.Count; i++)
{
if(i%5==0)
{
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
} GUIStyle thisStyle = null; if(s_chosenIndex ==i)
{
thisStyle = highlightedStyle; }
else
{
thisStyle = defaultStyle;
} if (GUILayout.Button("" + i, thisStyle))
{
Profiler.AddFramesFromFile(s_cachedFilePaths[i]);
s_chosenIndex = i;
}
} EditorGUILayout.EndHorizontal();
}
}

  

Unity 性能分析小工具的更多相关文章

  1. Linux性能分析命令工具汇总

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  2. JavaScript 性能分析新工具 OneProfile

    OneProfile 是一个网页版的小工具,可以用全新的方式展示 JavaScript 性能分析的结果,帮助开发者洞悉函数调用关系,优化应用性能. 点击打开 OneProfile 背景 Chrome ...

  3. Android性能分析Systrace工具

    一.概述 保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态.当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测Andro ...

  4. 性能分析之工具使用——cpu、io 、mem【工具分析】

    nmon nmon 是一种在aix 与各种 Linux 操作系统上广泛使 用的监控与与分析工具,他主要记录以下内容: • cpu 占用率 • 内存使用情况 • 磁盘I/O 速度.传输和读写比率 • 文 ...

  5. 后台故障&性能分析常用工具

    说明 本文是一个归纳总结,把常用的一些指令,及它们常用的option简单记录了一下,目的是当我们需要工具去定位问题的时候,能够从中找到合适的工具,具体的用法网上有很多博文了,当然还有man手册.参考了 ...

  6. Linux Performance Analysis and Tools(Linux性能分析和工具)

    首先来看一张图: 上面这张神一样的图出自国外一个Lead Performance Engineer(Brendan Gregg)的一次分享,几乎涵盖了一个系统的方方面面,任何人,如果没有完善的计算系统 ...

  7. 【Unity]】AR小工具-Vuforia

    很有意思的增强现实玩具,六分钟应用. https://www.youtube.com/watch?v=khavGQ7Dy3c

  8. Traceview 性能分析工具

    简介 TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:http://deve ...

  9. Linux 性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  10. [转]Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

随机推荐

  1. 数据预处理时为什么要使用OneHot编码?

    什么是LabelEncoder(整数编码) 整数编码 将一列文本数据转化成数值,即列中的每一个特征都通过一个整数来表示.例如,[red, blue, red, yellow] = [0,2,0,1]. ...

  2. day07-Spring管理Bean-IOC-05

    Spring管理Bean-IOC-05 3.基于注解配置bean 3.3自动装配 基本说明: 基于注解配置bean,也可以实现自动装配,使用的注解是:@AutoWired或者@Resource @Au ...

  3. angular11给Echarts添加点击事件,无脑抄代码的时候到了~~ 超好用

    关于引入Echarts的方法在此 直通车在此 接下来就是添加点击事件,获取X轴的数据 <div echarts #charts [options]="chartOption" ...

  4. 内存概述-java虚拟机的内存划分

    内存概述 内存是计算机中的重要原件,临时存储区域,作用是运行程序,我们编写写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存. Java虚拟机要运行程 ...

  5. JSP第二次作业

    1.p39   实验2 显示当前时间,并输出上午(0-12)好,下午好(13-17),晚上好(18-23) 1 <%@ page language="java" import ...

  6. Python装饰器实例讲解(一)

    Python装饰器实例讲解(一) 多种角度讲述这个知识,这是个系列文章 但前后未必有一定的顺承关系 部分参考网络 本文以一个小案例引出装饰器的一些特点,不涉及理论,后面再谈 案例 写一个代码来求一个数 ...

  7. FAQ Selenium中提示can not connect to the service chromedriver 的解决方法

    can not connect to the service chromedriver问题的处理 背景 一个同学反馈运行如下代码  from selenium import webdriver     ...

  8. 【DS】1.2

    top-iron man   算法 效率度量 时间T=T(n) 1.顺序忽略2.只选一个基本操作分析3.多层嵌套只考虑最深的循环循环了几次  test1: test2: 空间   原地工作:算法所需内 ...

  9. 深入理解JavaScript对象

    前言 在 JavaScript 中,对象是一种非常常见的数据类型,几乎每个程序员都会在日常工作中频繁地使用对象.在本篇文章中,我们将深入了解 JavaScript 对象的一些基本概念和一些高级概念,这 ...

  10. JZOJ 5346. 【NOIP2017提高A组模拟9.5】NYG的背包

    题目 分析 很神奇的贪心 \(Code\) #include<cstdio> #include<algorithm> using namespace std; typedef ...