前言
写的屎山被同事说了。。
检测一段代码的性能开销
方法1
GPT老师给出了这段模板代码
void Start()
{
// 创建 Stopwatch 实例
Stopwatch stopwatch = new Stopwatch();
// 开始计时
stopwatch.Start();
// 在这里放置你要测试执行时间的代码段
YourCodeToMeasure();
// 停止计时
stopwatch.Stop();
// 获取经过的时间
TimeSpan elapsedTime = stopwatch.Elapsed;
// 打印执行时间到控制台
UnityEngine.Debug.Log("代码执行时间: " + elapsedTime);
}
void YourCodeToMeasure()
{
// 这里放置你要测试执行时间的代码
// 例如:一个循环,一个函数,或者其他代码块
for (int i = 0; i < 1000000; i++)
{
// 你的代码
}
}
用的是.NET的System.Diagnostics
的Stopwatch类。
https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch?view=netcore-2.2
方法2
看到网上还有一个方法是用unity自带的性能分析工具profile进行检测。
Profiler.BeginSample("TestName");
// the code to test
Profiler.EndSample();
在Profiler.BeginSample("");
这个方法里,自己添加一个自定义label,然后就可以在unity的profile里看到对应的监控。
https://docs.unity3d.com/cn/2020.2/Manual/ProfilerWindow.html
屎山分析
需求背景
有一个教学内容,里面分为不同的章节,每一章节有10~100张ppt不等,因为有些章节有上百页ppt,我想做一个次级标题,方便更快速的定位对应内容。
实现
这个需求要实现起来非常简单,只需要对每个要标记为次级标题的ppt标上对应的名称,然后再遍历一遍整个章节的ppt标记上对应的跳转页码。
但是我考虑到如果要在程序加载的时候,每次都要去遍历标题是不是比较消耗性能,于是我写了一个脚本把遍历好的数据结构储存为一个JSON文件。当程序开始加载的时候只需要读取JSON文件就可以了(空间换时间!赢!)
思维漏洞
虽然确实是省去了每次初始化遍历的时间消耗,但是因为其实对于很少量的ppt来说(没有上千),遍历的时间开销要比从硬盘加载读取JSON资源的时间短。
总结
时间换空间还需要考虑到IO读写速度,因此存内存才是最好的选择。
Q.E.D.