2013-04-03 17 views
7

我有一個關於C#,Mono和OSX的問題。我在C#中使用Windows Forms創建了一個程序,並試圖使它在Mac上可用。Mono C#WinForms - >在Mac OSX上運行時出現嚴重的性能問題

問題是,OSX的性能非常差,我無法找到加速它的方法。實際上,程序本身非常簡單:只使用兩個DataGridViews,幾個ComboBoxes和Buttons,一個TabControl,幾個SplitContainer的客戶端服務器系統 - 就這些!在Windows上運行良好,沒有任何速度問題。

當我在Mac(MacBook Air,OSX版本10.8.3)上打開程序時,需要很長時間來加載GUI。在Windows上構建它大約需要0.5秒,在Mac上需要近一分鐘(!)。所有控件的構建速度非常緩慢,大多數情況下,通過點擊最少10秒的響應來與程序進行交互。

我瞭解到,Mono本身使用Windows.System.Drawing構建GUI。這是該計劃響應速度極慢的一個可能原因嗎?我能做些什麼來加快程序的速度?必須有某種方式,因爲如果Mono對於這樣一個簡單的程序甚至不可用,那麼Mono就毫無用處...

我花了數小時試圖Google解答我的問題,而且找不到任何東西有用:AheadOfTime-Compiling,LLVM - 沒有任何改進性能。

非常感謝您提前給出的答案!

克里斯

UPDATE: 從來就現在有點下降的性能比較問題。單聲道似乎與GridView的CellFormating有問題。我改變了適用部分的代碼,現在它運行得更快。

儘管如此,構建GUI仍然需要很長時間。你可以從字面上看它構建的GUI。對此有何建議?

+0

您是否使用XML傳輸數據? –

回答

1

您將不得不在Mac或Linux上進行調試,以確定哪些操作如此糟糕。單聲道有一些實現令人驚訝的慢。當你看到UI速度慢的症狀時,原因可能完全是另一回事。

例如,在類似的情況下,我發現XmlDocument非常慢,因爲我正在研究UI爲什麼如此遲鈍。如果您使用XmlDocument存儲來自服務器的數據,則可能會導致您的用戶界面速度緩慢且幾乎無法響應。

+1

感謝您的回答。我正在使用XmlDocument從xml文件讀取服務器地址。因爲我只是在閱讀一個不可能成爲問題的IP地址 - 或者可以嗎?我只是硬編碼服務器地址,重新編譯測試並在此發佈結果。這可能需要幾天時間,因爲我目前正在解決其他問題。另外,如果我想在Mac上調試在Visual Studio中開發的程序,我需要什麼? – Chris

+0

MonoDevelop是免費的,並有一個標準的Mac安裝程序。 –

+0

好的,謝謝你的信息。將嘗試一下。 – Chris

3

加載時間可能是JIT第一次編譯你的代碼(我的程序集需要30-60秒才能第一次啓動);第二次運行程序的速度應該更快。在Windows上,Visual Studio將AOT作爲編譯的一部分,所以第一次啓動很快。我認爲這是由於字體渲染造成的慢速控制性能(它甚至不是好看的渲染)。最重要的是,keyboard handling is wrongly implemented以及Mountain Lion以後,您還需要用戶下載XQuartz。

Mono很有用,但它的WinForms實現不是。如果OS X支持對您很重要,您的選擇如下:

  1. 使用不同的工具包(GTK#,WX.Net等)。
  2. 使用XCode構建一個Cocoa Library DLL,使用C#編寫PInvoke

最安全的賭注是後者,但如果您的需求很簡單,那麼只需使用不同的工具包可能會更容易。

+0

Visual Studio沒有AOT編譯器或與mscorsvw交互。你的來源是什麼? – Dai

+0

@Dai我相信它會調用[NGEN(http://msdn.microsoft.com/en-us/magazine/cc163808.aspx)(或類似)在Visual Studio編譯的時候,但我會盡力幫您找到當我回家後,稍後再發布一篇博文。 –

+0

@史密斯先生謝謝你的回答。由於該程序不是那麼大,我可以使用不同的工具包。你有沒有使用你建議的工具包的經驗?如果我交換工具包並且遇到我現在具有的相同速度問題,那將會非常煩人:-) – Chris

相關問題