Mono C#WinForms - >在Mac OSX上运行时出现严重的性能问题

时间:2013-04-03 18:15:44

标签: c# winforms performance macos mono

我对C#,Mono和OSX有疑问。我使用Windows Forms在C#中创建了一个程序,并尝试在Mac上使用它。

问题是,OSX上的性能极差,我无法找到加快速度的方法。该程序本身非常简单:一个客户端服务器系统只使用两个DataGridViews,一些ComboBoxes和Buttons,一个TabControl,一些SplitContainers - 就是这样!在Windows上运行良好,没有任何速度问题。

当我在Mac上打开程序(MacBook Air,OSX版本10.8.3)时,加载GUI需要很长时间。在WIndows上构建它需要大约0.5秒,在Mac上大约需要一分钟(!)。所有控件的构建都非常缓慢,并且大部分时间通过点击某些内容与程序进行交互,需要至少10秒来响应。

我了解到Mono本身使用Windows.System.Drawing构建GUI。这可能是该计划反应极其缓慢的原因吗?我该怎么做才能加快程序的速度?必须有某种方式,因为如果它甚至不能用于这样一个简单的程序,Mono将毫无用处......

我花了好几个小时试图回答我的问题并且找不到任何有用的东西:AheadOfTime-Compiling,LLVM - 没有什么可以改善性能。

提前感谢您的回答!

克里斯

更新 我现在减少了性能问题。 Mono似乎遇到了Gridview的CellFormating问题。我更改了适用部分中的代码,现在运行得更快。

然而,构建GUI仍需要很长时间。你可以从字面上看它构建GUI。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

加载时间可能是JIT第一次编译代码(第一次启动我的程序集大约30-60秒);第二次运行你的程序应该加载更快。在Windows上,Visual Studio会将您的程序集作为编译的一部分,因此第一次启动很快。我认为慢控制性能是由于字体渲染(它甚至看起来都不好看)。最重要的是,keyboard handling is wrongly implemented以及自Mountain Lion以来,您还需要用户下载XQuartz。

Mono很有用,但它的WinForms实现却没有。如果OS X支持对您很重要,您的选项如下:

  1. 使用其他工具包(GTK#,WX.Net等)。
  2. 使用XCode构建Cocoa Library DLL,并使用C#构建PInvoke
  3. 最安全的选择是后者,但如果您的需求很简单,那么使用不同的工具包可能会更容易。

答案 1 :(得分:1)

您必须在Mac或Linux上进行调试才能找到运行得非常糟糕的内容。 Mono的一些实现速度非常慢。当您看到UI缓慢的症状时,原因可能完全不同。

例如,在类似的情况下,我发现XmlDocument非常慢,因为我正在研究UI为何如此迟缓。如果您使用XmlDocument存储来自服务器的数据,则可能导致UI速度缓慢且几乎没有响应。