本文所有代码建议直接Copy使用,没必要深究
1.代码平均采样计时
我们的电脑每次执行同一段代码的时间都有细微的误差,所以我们取一千次的平均就可以达到误差很小,下面一段计时代码
static void SampleAverTime(Action testAction, int stepCount = 10)
{
TimeSpan aver = new TimeSpan(0);
for (int i = 1; i <= stepCount; i++)
{
Stopwatch wathct = Stopwatch.StartNew();
testAction();
wathct.Stop();
aver += wathct.Elapsed;
Console.Clear();
Console.WriteLine($"|第{i}次采样完成|平均耗时 {aver / i}|");
}
}
使用方法是这样的
static void A()
{
//写被测代码
}
//在Main里写
SampleAverTime(A, 1000);
2.代码GC计算
过度的GC会引起卡顿,我们有时候需要简单的印证一下心头的想法,康康自己写的某一句代码有无GC,我们采用这样一个方法来进行分析
static void TestGCAlloc(Action testAcction,int frameCount)
{
List<long> list = new List<long>(frameCount + 10);
bool sign = true;
Thread thread = new Thread(() =>
{
Action action = testAcction;
for (int i = 0; i<frameCount;i++)
{
long lastGC = GC.GetAllocatedBytesForCurrentThread();
action();
long gc = GC.GetAllocatedBytesForCurrentThread();
list.Add(gc -lastGC);
}
sign= false;
});
thread.IsBackground= true;
thread.Start();
while (sign) ;
for(int i=1;i<=list.Count;i++)
{
Console.WriteLine($"第{i}帧GCAlloc : {list[i-1]}B");
}
}
使用方法是这样的
static void MyForeach()
{
foreach (var item in MY) ;
}
static void Main(string[] args)
{
TestGCAlloc(MyForeach, 10);
}