今天分享一下日常工作中遇到的性能问题和解决方案,比较零碎,后续会持续更新(运行环境为.net core 3.1)
本次分享的案例都是由实际生产而来,经过简化后作为举例
Part 1(作为简单数据载体时class和struct的性能对比)关于class和struct的区别,根据经验,在实际开发的绝大多数场景,都会使用class作为数据类型,但是如果是作为简单数据的超大集合的类型,并且不涉及到拷贝、传参等其他操作的时候,可以考虑使用struct,因为相对于引用类型的class分配在堆上,作为值类型的struct是分配在栈上的,这样就拥有了更快的创建速度和节约了指针的空间,列举了3000万个元素的集合分别以class和struct作为类型,做如下测试(测试工具为vs自带的 Diagnostic Tools):
class Program { static void Main (string[] args) { var structs = new List<StructTest> (); var stopwatch1 = new Stopwatch (); stopwatch1.Start (); for (int i = 0; i < 30000000; i++) { structs.Add (new StructTest { Id = i, Value = i }); } stopwatch1.Stop (); var structsTotalMemory = GC.GetTotalMemory (true); Console.WriteLine ($"使用结构体时消耗内存:{structsTotalMemory}字节,耗时:{stopwatch1.ElapsedMilliseconds}毫秒"); Console.ReadLine (); } public struct StructTest { public int Id { get; set; } public int Value { get; set; } } }