我們來試試用.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秒也不太明顯。
- 雖然執行了幾次都是類似的結果,不過數學加減乘除運算並不代表所有運算情境喔。