当前位置:首页 > Web开发 > 正文

最终还是看业务需求~ 共性大就用接口(生物:人

2024-03-31 Web开发

  随大流的用.net core也没有系统的学习,只知道.net core撑持跨平台,其他的点上没步伐讲出个一二,今天听老师讲到的一个点,记录下来

  测试点:在.net core/.net framework差别平台下 接口,抽象类,类以及各自对应的实现类 循环挪用,哪个平台中哪个的运行效率最高?  

  新建两个控制台措施,.net core(3.1) 和 .net framework(我用的是4.7.2)   

 

技术图片

       

技术图片

同样一份代码,在差别平台运行,以下是code:

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 Console.WriteLine("测试差别框架下,接口与抽象类的效率:.net core 3.1 release: "); 7 var t = new Test(); 8 t.PerformanceTest(); 9 Console.ReadKey(); 10 } 11 }

View Code

1 namespace CoreConsole 2 { 3 public class Test 4 { 5 public void PerformanceTest() 6 { 7 8 IChild record1 = new IChild(); 9 IBase record2 = record1; 10 11 AbsChild row1 = new AbsChild(); 12 AbsBaseClass row2 = row1; 13 14 Child result1 = new Child(); 15 Base result2 = result1; 16 17 Console.WriteLine($"循环{int.MaxValue}次,去执行接口,抽象类,类以及实现类里面的要领"); 18 19 Stopwatch stopwatch = new Stopwatch(); 20 21 22 stopwatch.Restart(); 23 for (int i = 0; i < int.MaxValue; i++) 24 { 25 record1.Do(); 26 } 27 Console.WriteLine($"接口实现类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 28 29 30 stopwatch.Restart(); 31 for (int i = 0; i < int.MaxValue; i++) 32 { 33 record2.Do(); 34 } 35 Console.WriteLine($"接口基类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 36 37 38 39 stopwatch.Restart(); 40 for (int i = 0; i < int.MaxValue; i++) 41 { 42 row1.Do(); 43 } 44 Console.WriteLine($"抽象实现类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 45 46 47 stopwatch.Restart(); 48 for (int i = 0; i < int.MaxValue; i++) 49 { 50 row2.Do(); 51 } 52 Console.WriteLine($"抽象基类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 53 54 55 56 stopwatch.Restart(); 57 for (int i = 0; i < int.MaxValue; i++) 58 { 59 result1.Do(); 60 } 61 Console.WriteLine($"类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 62 63 stopwatch.Restart(); 64 for (int i = 0; i < int.MaxValue; i++) 65 { 66 result2.Do(); 67 } 68 Console.WriteLine($"基类挪用时间:{stopwatch.ElapsedMilliseconds} 毫秒"); 69 70 } 71 } 72 73 public interface IBase 74 { 75 void Do(); 76 } 77 78 public class IChild : IBase 79 { 80 public void Do() 81 { 82 83 } 84 } 85 86 public abstract class AbsBaseClass 87 { 88 public abstract void Do(); 89 } 90 91 public class AbsChild : AbsBaseClass 92 { 93 public override void Do() 94 { 95 } 96 } 97 98 public class Base 99 { 100 public virtual void Do() { } 101 } 102 103 public class Child : Base 104 { 105 public override void Do() 106 { 107 108 } 109 } 110 }

View Code

下图是运行的效果比拟图:

总体测试下来是.net core > .net framework   且快10倍摆布 (我看老师运行快个7,8倍摆布) 

 接口和抽象谁效率高?我将test的要领循环了10次,:.net core中八两半斤,抽象类  > 接口 (略微)

小我私家经验:在接口和抽象类的选择中,,最终还是看业务需求~ 共性大就用接口(生物:人,鱼,狗),特性就用抽象~(鱼:鲫鱼,草鱼,鲤鱼)

 初学,有什么错误,欢迎斧正~

最后一点,谁能指出为什么两个平台差异这么大呢?

技术图片

技术图片

.net core 与 .net framework 的一些差别点

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30866.html