[.NET][C#.NET]走跳在Linux的人生(八).NET Core與Mono執行

我們來試試用.NET Core從Windows環境開發,然後porting到Linux環境(佈署及執行.NET Core),之前曾看過stackoverflow文章提到Mono的效能問題,這一次我們同時也想了解.NET Core與Mono在效能中的表現是否有變數。 

 

環境:

  • 開發環境: Windows 10 + Visual Studio 2017  
  • AP環境: Red Hat Enterprise Linux + Mono 5.0.1.1 + .NET Core 1.1

 


新增主控台應用程式(.NET Core) 與(.NET Framework) 

我們第一個設定專案名稱是CoreConsole 

接著新增主控台應用程式(.NET Framework) ,這邊設定專案名稱是MonoConsole 

分別打開兩個專案的program.cs程式碼,輸入以下程式碼 

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
        DateTime dtStart = DateTime.Now; 
        System.Console.WriteLine(dtStart.ToString("o")); 
        run(); 
        DateTime dtEnd = DateTime.Now; 
        System.Console.WriteLine(dtEnd.ToString("o")); 
  
        TimeSpan ts = dtEnd - dtStart; 
        System.Console.WriteLine(ts.TotalMilliseconds); 
        //.NET CORE專案 
        System.Console.WriteLine(".NET CORE"); 
        //.NET Framework專案 
         System.Console.WriteLine(".NET Framework"); 
        Console.ReadKey(true); 
    } 
  
    public static void run() 
    { 
        int i = 2; 
        int j = 3; 
        for (int x = 0; x < 20000000; x++) 
        { 
            int a = i + j; 
            int b = i - j; 
            int c = i * j; 
            int d = i / j; 
        } 
    } 
} 

 

簡單的加減乘除執行2000萬次

 


Windows 環境執行:  

 

首先在windows環境下以Visual Studio 執行! 

啟動但不偵錯(Ctrl + F5

.NET Core: 175ms

.NET Framework : 132ms

速度相近,.NET Framework略快一些,差別不太大,都很快。

 


Linux 環境執行:  

分別打開兩個專案的bin目錄,將dll及exe以pscp或是ftp指令複製到Linux環境 

 

.NET Core(直接編譯成dll)

.NET Framework(傳統的exe) 

 

.NET Core : 326 ms

Mono : 202 ms 

 


小結: 

  • 相較Windows環境執行都來的慢一點點,不過因為機器不同(實體 vs 虛擬,i7 vs E5),沒辦法比較 
  • 在Linux上也都算快,Mono略快了一些,不過2000萬次數學運算,差異0.1秒也不太明顯。 
  • 雖然執行了幾次都是類似的結果,不過數學加減乘除運算並不代表所有運算情境喔。 

 

 


參考: 

Runtime Performance of NET Core vs. NET Framework vs. Mono 

What is the difference between .NET Core and Mono