Unity 性能分析小工具
下文有两个方法,分别是一段检测执行过程耗费时间的代码,还有一个是保存和加载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 性能分析小工具的更多相关文章
- Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- JavaScript 性能分析新工具 OneProfile
OneProfile 是一个网页版的小工具,可以用全新的方式展示 JavaScript 性能分析的结果,帮助开发者洞悉函数调用关系,优化应用性能. 点击打开 OneProfile 背景 Chrome ...
- Android性能分析Systrace工具
一.概述 保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态.当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测Andro ...
- 性能分析之工具使用——cpu、io 、mem【工具分析】
nmon nmon 是一种在aix 与各种 Linux 操作系统上广泛使 用的监控与与分析工具,他主要记录以下内容: • cpu 占用率 • 内存使用情况 • 磁盘I/O 速度.传输和读写比率 • 文 ...
- 后台故障&性能分析常用工具
说明 本文是一个归纳总结,把常用的一些指令,及它们常用的option简单记录了一下,目的是当我们需要工具去定位问题的时候,能够从中找到合适的工具,具体的用法网上有很多博文了,当然还有man手册.参考了 ...
- Linux Performance Analysis and Tools(Linux性能分析和工具)
首先来看一张图: 上面这张神一样的图出自国外一个Lead Performance Engineer(Brendan Gregg)的一次分享,几乎涵盖了一个系统的方方面面,任何人,如果没有完善的计算系统 ...
- 【Unity]】AR小工具-Vuforia
很有意思的增强现实玩具,六分钟应用. https://www.youtube.com/watch?v=khavGQ7Dy3c
- Traceview 性能分析工具
简介 TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:http://deve ...
- Linux 性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- [转]Linux性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
随机推荐
- YMOI 2019.6.29
题解 YMOI 2019.6.29 放弃FAIOJ,用cena考了一次试.被全方位吊打.. T1 开灯 题面: 在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,--. 每一盏灯只有两种可 ...
- (转载)零日攻击(Zero-Day Attacks)
零日攻击是网络安全行业中十分常见的攻击方式之一,其具有很大的突发性与破坏性,那么零日攻击是什么?如何防范零日攻击?以下是详细的内容介绍. 零日攻击是什么? 零日漏洞或零时差漏洞通常是指还没有补丁的安全 ...
- 面试官:JVM是如何判定对象已死的?
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 知道的越多,才知知道的越少.--苏格拉底 目录 引用计数算法 可达性分析算法 引用类型 ...
- 如何又快又好实现 Catalog 系统搜索能力?火山引擎 DataLeap 这样做
摘要 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维.治理.资产.安全等全套数据中台建设,降低工作成本和数据维护成本.挖掘数据价 ...
- Unity模块嵌入到Android中
嗨,大家好,小黑在沉寂了6个月之后,终于要继续写一篇博客了. 先吐槽一波上家公司PHD&&OMS,不吐不快.上家公司的小黑,每天不是在弄UIWidgets,就是再弄UIWidgets, ...
- Unity_UIWidgets - 组件Container
Unity_UIWidgets - 组件Container Container 构造 效果 结语 QQ 今日无推荐 Unity_UIWidgets - 组件Container 上周给大家讲完了Scaf ...
- 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理
写在前面 我发现一件神奇的事,当你学一门新技术或者新的知识点遇到不会的时候,真的可以先放一放,第二天再去学习,也许说不定也就会了. 为什么这么说? 昨天文章断断续续的写了近一天,有一个组件不认识,自然 ...
- 懂九转大肠的微软New Bing 内测申请教程
最近微软的New Bing开放内测了,网上已经有拿到内测资格的大佬们对比了ChatGPT和New Bing.对比结果是New Bing比ChatGPT更强大.来看看具体对比例子吧 1.时效性更强 Ch ...
- K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout'分析与解决
开篇 <K3s 系列文章> <Rancher 系列文章> 问题概述 20220606 5G IoT 网关设备同时安装 K3S Server, 但是 POD 却无法访问互联网地址 ...
- JavaSE 对象与类(一)
对象与类 1.面向对象程序概述 Java是完全面向对象的,必须熟悉OOP才能够编写Java程序. 概念:类class.实例(对象)instance 由类构造(construct)对象的过程称为创建类的 ...