Mono c# WinForms ->在Mac OSX上运行时出现严重的性能问题
本文关键字:问题 性能 运行时 WinForms OSX Mac Mono | 更新日期: 2023-09-27 18:07:28
我有一个关于c#、Mono和OSX的问题。我使用Windows窗体创建了一个c#程序,并试图使其在Mac上可用。
问题是,它在OSX上的性能非常差,我就是找不到加速它的方法。程序本身其实很简单:一个客户端服务器系统,只使用两个DataGridViews,几个组合框和按钮,一个TabControl,几个splitcontainer -这就是它!
当我在Mac (MacBook Air, OSX版本10.8.3)上打开程序时,加载GUI需要很长时间。在WIndows上创建它只需要0.5秒,在Mac上则需要1分钟。所有的控件都建立得非常慢,大多数时候,当通过点击某些东西与程序交互时,它至少需要10秒才能做出反应。
我已经了解到Mono使用Windows.System.Drawing本地构建GUI。这可能是程序反应极其缓慢的原因吗?我怎样才能加快进度呢?一定有某种方法,因为如果Mono甚至不能用于这样一个简单的程序,那么它将是相当无用的…
我花了几个小时试图谷歌回答我的问题,只是找不到任何有用的:aheadoftime编译,LLVM -没有提高性能。
提前感谢你的回答!
克里斯更新:我现在已经减少了一些性能问题。Mono似乎有Gridviews的cellformatting问题。我更改了适用部分的代码,现在它运行得更快了。
尽管如此,构建GUI仍然需要很长时间。您可以从字面上看到它构建GUI。对此有什么建议吗?
加载时间可能是JIT第一次编译你的代码(我的程序集第一次启动也需要大约30-60秒);第二次运行程序应该加载得更快。在Windows上,Visual Studio将AOT程序集作为编译的一部分,因此第一次启动很快。控制性能慢我认为是由于字体渲染(它甚至不是很好看的渲染)。最重要的是,键盘处理的实现是错误的,因为Mountain Lion,你还需要用户下载XQuartz。
Mono是有用的,但它的WinForms实现不是。如果OS X支持对你很重要,你的选择如下:
- 使用不同的工具包(gtk#, WX。净等)。
- 使用XCode构建
Cocoa Library
DLL,并从c#构建PInvoke
DLL。
最安全的选择是后者,但如果您的需求很简单,使用不同的工具包可能更容易。
您必须在Mac或Linux上调试才能找到究竟是什么运行得如此糟糕。Mono的一些实现速度慢得惊人。当您看到缓慢UI的症状时,原因可能完全是其他的东西。
例如,在类似的情况下,我发现XmlDocument非常慢,因为我正在研究UI如此缓慢的原因。如果使用XmlDocument来存储来自服务器的数据,可能会导致UI很慢,几乎没有响应。