.net core 與 .net framework 的一些不同點


  隨大流的用.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     }
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中不相上下,抽象類  > 接口 (略微)

   個人經驗:在接口和抽象類的選擇中,最終還是看業務需求~ 共性大就用接口(生物:人,魚,狗),特性就用抽象~(魚:鯽魚,草魚,鯉魚)

 初學,有什么錯誤,歡迎指正~

   最后一點,誰能指出為什么兩個平台差異這么大呢?

    

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM