NetBenchmarkDotNet性能测试
案例
using BenchmarkDotNet.Attributes;
using BenchmarkDotNetDemo.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace BenchmarkDotNetDemo
{
[MemoryDiagnoser, RankColumn]
public class Test
{
IList<HTEAndStudent> stringslist = new List<HTEAndStudent>();
/* List<HTEAndStudent> stringslist2 = new List<HTEAndStudent>();
List<HTEAndStudentDto> hTEAndStudentDtosOut = new();*/
public Test()
{
Random random = new Random();
for (int i = 0; i < 10000000; i++)
{
stringslist.Add(new HTEAndStudent
{
IsSubmit = true,
StudentId = i,
Score = i + random.Next(1, 99),
Scorerate = 666,
StudyClassId = i + random.Next(1, 11),
});
/* stringslist2.Add(new HTEAndStudent
{
IsSubmit = true,
StudentId = i.ToString(),
Score = i + random.Next(1, 99),
Scorerate = 666,
StudyClassId = i + random.Next(1, 11),
});*/
}
/* for (int i = 0; i < 1000; i++)
{
hTEAndStudentDtosOut.Add(new()
{
IsSubmit = true,
StudentId = i,
Score = i + random.Next(1, 99),
Scorerate = 666,
StudyClassId = i + random.Next(1, 81),
});
}*/
}
/* [Benchmark]
public void KK()
{
var aaaa = stringslist2.Where(r => r.StudentId < 1800).ToList();
foreach (var item in aaaa)
{
var bbbb = hTEAndStudentDtosOut.Where(r => r.StudyClassId == item.StudyClassId && r.Score > 50).ToList();
var aadd = bbbb.Count;
}
}
[Benchmark]
public void KK1()
{
var aaaa = stringslist2.Where(r => r.StudentId < 1800).ToList();
var bbbbdic = hTEAndStudentDtosOut.GroupBy(r=>r.StudyClassId).ToDictionary(r => r.Key,v=>v.Where(r=>r.Score > 50).ToList());
foreach (var item in aaaa)
{
if(bbbbdic.ContainsKey(item.StudyClassId))
{
var bbbb = bbbbdic[item.StudyClassId];
var aadd = bbbb.Count;
}
}
}*/
/*
[Benchmark]
public void Count_Method()
{
if (stringslist.Count() == 0)
{
Console.WriteLine("5555");
}
}
[Benchmark]
public void Count_Property()
{
if (stringslist.Count == 0)
{
Console.WriteLine("5555");
}
}
[Benchmark]
public void Any()
{
if (!stringslist.Any())
{
Console.WriteLine("5555");
}
}
[Benchmark]
public void Count_Method_Where()
{
if (stringslist.Count(r => r.StudentId == 5) == 0)
{
Console.WriteLine("5555");
}
}
[Benchmark]
public void Any_Method_Where()
{
if (!stringslist.Any(r => r.StudentId == 5))
{
Console.WriteLine("5555");
}
}
[Benchmark]
public void IListForeEachList()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
stringslist.ToList().ForEach(r =>
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
});
}*/
[Benchmark]
public void ForeEachList()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
stringslist.ToList().ForEach(r =>
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
});
}
[Benchmark]
public void Forech()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
foreach (var r in stringslist)
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
}
}
[Benchmark]
public void For()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
for (int i = 0; i < stringslist.Count; i++)
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = stringslist[i].StudyClassId,
Scorerate = stringslist[i].Scorerate,
IsSubmit = stringslist[i].IsSubmit,
Score = stringslist[i].Score,
StudentId = stringslist[i].StudentId,
});
}
}
/* [Benchmark]
public void ForechIntoDto()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
foreach (var r in stringslist)
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
}
}
[Benchmark]
public void LinqSelectIntoDto()
{
List<HTEAndStudentDto> hTEAndStudentDtos = stringslist.Select(r => new HTEAndStudentDto()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
}
).ToList();
}
[Benchmark]
public void foreachHasWhereOuter()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
var data = stringslist.Where(r => r.Score > 80);
foreach (var r in data)
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
}
}
[Benchmark]
public void foreachHasWhereInner()
{
List<HTEAndStudentDto> hTEAndStudentDtos = new();
foreach (var r in stringslist.Where(r => r.Score > 80))
{
hTEAndStudentDtos.Add(new()
{
StudyClassId = r.StudyClassId,
Scorerate = r.Scorerate,
IsSubmit = r.IsSubmit,
Score = r.Score,
StudentId = r.StudentId,
});
}
}*/
}
}
Program
using BenchmarkDotNet.Running;
namespace BenchmarkDotNetDemo
{
internal class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<Test>();
Console.WriteLine("Hello, World!");
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix