51 lines
2.0 KiB
C#
51 lines
2.0 KiB
C#
using System;
|
||
using UnityEngine.Events;
|
||
using System.Diagnostics;
|
||
namespace ZXKFramework
|
||
{
|
||
/// <summary>
|
||
/// Stopwatch类的工具类。用于计算运行一段代码所用的时间。
|
||
/// </summary>
|
||
public static class StopwatchUtility
|
||
{
|
||
/// <summary>
|
||
/// 获取执行一段代码所用的时间的信息。
|
||
/// </summary>
|
||
/// <param name="call">要执行的代码</param>
|
||
public static TimeSpan GetTime(UnityAction call)
|
||
{
|
||
Stopwatch timer = Stopwatch.StartNew();//声明计时器
|
||
timer.Start();//开启计时器
|
||
call?.Invoke();//执行一段代码
|
||
timer.Stop();//停止计时器
|
||
return timer.Elapsed;//返回时间信息
|
||
}
|
||
|
||
/// <summary>
|
||
/// 在控制台打印执行一段代码所用的时间,单位是秒。
|
||
/// </summary>
|
||
/// <param name="call">要执行的代码</param>
|
||
/// <param name="executionNumber">执行的次数。应保证它为正整数,否则本方法无效,并会在控制台显示黄色的警告信息。</param>
|
||
public static void PrintTime(UnityAction call, int executionNumber = 1)
|
||
{
|
||
//保证执行次数为正整数。
|
||
if (executionNumber <= 0)
|
||
{
|
||
UnityEngine.Debug.LogWarning("Stopwatch性能测试失败!执行次数应为正整数。");
|
||
return;
|
||
}
|
||
|
||
//用于记录所用的总时间,单位是毫秒。
|
||
double totalMilliseconds = 0;
|
||
|
||
//执行一段代码一定的次数,并记录执行时间。
|
||
for (int i = 0; i < executionNumber; i++)
|
||
{
|
||
totalMilliseconds += GetTime(call).TotalMilliseconds;
|
||
}
|
||
|
||
//在控制台打印执行的总时间
|
||
UnityEngine.Debug.Log($"执行这段代码{executionNumber}次所需的时间是{totalMilliseconds / 1000}秒");
|
||
}
|
||
}
|
||
} |