隨大流的用.net core也沒有系統的學習,只知道.net core支持跨平台,其他的點上沒辦法講出個一二,今天聽老師講到的一個點,記錄下來
官網介紹:https://docs.microsoft.com/zh-cn/dotnet/core/about
測試點:在.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 }

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 }
下圖是運行的效果對比圖:
總體測試下來是.net core > .net framework 且快10倍左右 (我看老師運行快個7,8倍左右)
接口和抽象誰效率高?我將test的方法循環了10次,:.net core中不相上下,抽象類 > 接口 (略微)
個人經驗:在接口和抽象類的選擇中,最終還是看業務需求~ 共性大就用接口(生物:人,魚,狗),特性就用抽象~(魚:鯽魚,草魚,鯉魚)
初學,有什么錯誤,歡迎指正~
最后一點,誰能指出為什么兩個平台差異這么大呢?