2009-08-15 66 views
3

在Mono運行在編譯我有以下問題:性能:在VS,在Windows和Linux

  1. 是否可以編譯使用VS.NET C#項目,並在單運行呢?
  2. 與方法1相比,是否有任何性能優勢(與編譯單聲道編譯器相比)?
  3. 在linux上運行輸出.exe/.dll怎麼樣?什麼是相關的性能特點?

感謝

+1

使用單聲道,您可以使用AOT(Ahead Of Time)編譯。這會將您的.NET程序集(包含IL代碼)編譯爲C++或C生成的本機代碼,從而加快啓動時間,改善內存性能並提高整體性能。但是,它只能在編譯的操作環境(OS + x86/x64)上運行。 http://www.mono-project.com/AOT – 2009-08-15 23:14:27

+0

感謝您的信息。 – jameszhao00 2009-08-16 01:20:52

+0

@C羅傑斯 - 有點像NGEN(只是可能與GAC);-p – 2009-08-16 09:04:10

回答

8
  1. 是的,你可以做到這一點。它應該工作,除非代碼使用一些在單聲道上沒有實現的框架元素。

  2. 不是我所知道的。

  3. 不知道#3和#1之間的區別是什麼。如果您指的是在Windows上使用mono編譯,然後將其移植到linux,它應該仍然工作。兩種編譯器都生成基本相同的IL代碼。

1

我不知道性能,但this article試圖展示如何編譯MonoDevelop的工具下與這應該給你一些想法,以什麼樣的差異會。

6

1:
是的。編譯器編譯成可在任一系統中運行的IL代碼。

不是每個庫都在單聲道中實現,但那些應該無縫工作。此外,該代碼已被寫入到被影響無關係統的正常工作,例如:

  • 使用Path.DirectorySeparatorCharPath.Combine形成的,而不是使用字符串字面"\""/"文件路徑。
  • 使用BitConverter類進行獨立於大端/小端體系結構的字節操作。

2:
有可能是在什麼樣的代碼編譯器產生一些差異,但幾乎所有的優化是由JIT編譯器應該很少作出任何可測量的差異來完成。

3:
該exe文件和dll文件不包含本機代碼,它們包含IL代碼。本機代碼是在加載exe/dll時由JIT編譯器生成的。

+0

我認爲EXE/DLL包含CLR加載器/綁定器。 – jameszhao00 2009-08-15 23:00:54

2

爲了擴大在別人的答案:

對於點3.使用MSCLR VS單的時候是會有的性能差異,沒有,我不知道它是什麼。也許沒有什麼,或許很少,或者可能一個更快 - 你將不得不分析你的具體應用。請注意,儘管JIT編譯器的代碼速度很快,但這些庫的實現方式會有很大不同,並且幾乎肯定會有不同的性能特徵。

如果您打算在Mono下支持您的應用程序,您需要在那裏運行性能測試以及MS CLR。