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

单声道C#WinForms->;在Mac OSX上运行时出现严重的性能问题,c#,winforms,performance,macos,mono,C#,Winforms,Performance,Macos,Mono,我有一个关于C#,Mono和OSX的问题。我用Windows窗体用C#创建了一个程序,并试图使它在Mac上可用 问题是,OSX的性能非常差,我就是找不到加速的方法。该程序本身实际上非常简单:一个客户端-服务器系统只使用两个DataGridView、几个组合框和按钮、一个TabControl、几个SplitContainers——就这样!在Windows上运行良好,没有任何速度问题 当我在Mac(MacBookAir,OSX版本10.8.3)上打开程序时,加载GUI需要很长时间。在WIndows上

我有一个关于C#,Mono和OSX的问题。我用Windows窗体用C#创建了一个程序,并试图使它在Mac上可用

问题是,OSX的性能非常差,我就是找不到加速的方法。该程序本身实际上非常简单:一个客户端-服务器系统只使用两个DataGridView、几个组合框和按钮、一个TabControl、几个SplitContainers——就这样!在Windows上运行良好,没有任何速度问题

当我在Mac(MacBookAir,OSX版本10.8.3)上打开程序时,加载GUI需要很长时间。在WIndows上构建它大约需要0.5秒,在Mac上大约需要一分钟(!)。所有的控件都建立得非常慢,大多数情况下,通过点击某个东西与程序交互时,需要至少10秒的响应时间

我了解到Mono本机使用Windows.System.Drawing构建GUI。这可能是该计划反应极其缓慢的原因吗?我能做些什么来加速程序?一定有办法,因为如果Mono连这么简单的程序都用不上的话,它是相当无用的

我花了好几个小时试图用谷歌搜索我的问题的答案,但就是找不到任何有用的东西:提前编译,LLVM——没有任何东西能提高性能

非常感谢您提前回答

克里斯

更新: 我现在已经减少了一点性能问题。Mono似乎在GridView的单元格格式方面存在问题。我更改了适用部分的代码,现在运行得更快了


尽管如此,构建GUI仍然需要很多时间。您可以直接观看它构建GUI。对此有什么建议吗?

您必须在Mac或Linux上进行调试,才能找到到底是什么运行得如此糟糕。Mono的一些实现速度惊人地慢。当您看到UI缓慢的症状时,原因可能完全是其他原因


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

加载时间可能是第一次JIT编译代码(我的程序集第一次启动也需要30-60秒);第二次运行您的程序应该加载得更快。在Windows上,Visual Studio将AOT程序集作为编译的一部分,因此第一次启动很快。我认为缓慢的控制性能是由于字体渲染(它甚至不是好看的渲染)。除此之外,由于山狮,您还需要用户下载XQuartz

Mono是有用的,但它的WinForms实现不是。如果OS X支持对您很重要,您可以选择以下选项:

  • 使用不同的工具包(GTK#、WX.Net等)
  • 使用XCode和
    PInvoke构建
    Cocoa库
    DLL
    C#

  • 最安全的选择是后者,但如果您的需求很简单,那么使用不同的工具包可能更容易。

    您是否使用XML传输数据?Visual Studio没有AOT编译器,也没有与mscorsvw交互。您的来源是什么?@Dai我相信它在Visual Studio中编译时会调用(或类似),但我稍后回家后会尝试为您找到博客帖子。@Mr.Smith谢谢您的回答。由于程序没有那么大,我可能会使用不同的工具包。你对你推荐的工具包有经验吗?如果我交换工具包,遇到与现在相同的速度问题,那将是相当令人恼火的:-)@Mr.Smith多次运行我的程序并不能解决速度问题。你是对的:字体呈现不是很好,但它真的可能是控制速度慢的原因吗?我怀疑这可能是通过Windows.System.Drawing对所有WinForms进行单声道重画,因为构建每个表单都需要很长时间。我似乎不是唯一一个在WinForms上表现缓慢的人,但在其他情况下,它似乎完成了这项工作。我有什么办法可以解决这个问题吗?我提到的问题是基于已经安装的XQuartz。也有可能使用MonoMac,它是Cocoa API的C#绑定(这比自己编写要好)。谢谢你的回答。我使用XmlDocument从xml文件读取服务器地址。因为我只是在读一个IP地址,这个地址不可能是真正的问题——或者可以吗?我只需要硬编码服务器地址,重新编译测试并将结果发布在这里。这可能需要几天时间,因为我目前正在解决其他问题。另外,如果我想在mac上调试Visual Studio中开发的程序,我需要什么?MonoDevelop是免费的,有一个标准的mac安装程序。