我有一个关于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.有什么建议吗?
解决方法
加载时间可能是JIT第一次编译代码(第一次启动我的程序集大约30-60秒);第二次运行你的程序应该加载更快.在Windows上,Visual Studio会将您的程序集作为编译的一部分,因此第一次启动很快.我认为缓慢的控制性能是由于字体渲染(它甚至看起来都不好看).最重要的是,keyboard handling is wrongly implemented和Mountain Lion之后,您还需要用户下载XQuartz.
Mono很有用,但它的WinForms实现却不是.如果OS X支持对您很重要,您的选项如下:
>使用不同的工具包(GTK#,WX.Net等).
>使用XCode构建Cocoa库DLL并从C#中对其进行PInvoke.
最安全的选择是后者,但如果您的需求很简单,那么使用不同的工具包可能会更容易.