7

C#、Mono、OSX について質問があります。Windows Forms を使用して C# でプログラムを作成し、Mac で使用できるようにしようとしています。

問題は、OSX でのパフォーマンスが非常に悪く、速度を上げる方法が見つからないことです。実際、プログラム自体は非常に単純です。2 つの DataGridView、いくつかの ComboBoxes と Button、TabControl、いくつかの SplitContainers だけを使用するクライアント サーバー システムです。Windows で問題なく動作し、速度の問題はまったくありません。

Mac (MacBook Air、OSX バージョン 10.8.3) でプログラムを開くと、GUI の読み込みに時間がかかります。構築には、Windows では約 0.5 秒、Mac ではほぼ 1 分かかります(!)。すべてのコントロールの構築は非常に遅く、ほとんどの場合、何かをクリックしてプログラムと対話する場合、応答するのにさらに最低 10 秒かかります。

Mono は Windows.System.Drawing を使用して GUI をネイティブに構築することを学びました。プログラムの応答が非常に遅いのは、それが原因でしょうか? プログラムを高速化するにはどうすればよいですか? このような単純なプログラムでも使用できない場合、Mono はかなり役に立たないため、何らかの方法があるに違いありません...

私は自分の問題に対する答えをグーグルで検索しようと何時間も費やしましたが、有用なものを見つけることができません: AheadOfTime-Compiling、LLVM - パフォーマンスを向上させるものは何もありません。

事前にご回答いただきありがとうございます。

クリス

更新: パフォーマンスの問題を少し減らしました。Mono は Gridviews の CellFormating に問題があるようです。該当部分のコードを変更したところ、動作が速くなりました。

それにもかかわらず、GUI を構築するにはまだ時間がかかります。文字通り、GUI を構築するのを見ることができます。それに関する提案はありますか?

4

2 に答える 2

3

ロード時間は、コードを初めてコンパイルする JIT である可能性があります (アセンブリが初めて起動するのにも約 30 ~ 60 秒かかります)。プログラムを 2 度目に実行すると、はるかに高速にロードされるはずです。Windows では、Visual Studio はコンパイルの一部としてアセンブリを AOT するため、最初の起動は高速です。コントロールのパフォーマンスが遅いのは、フォント レンダリングによるものだと思います (レンダリングの見栄えもよくありません)。その上、キーボード処理が正しく実装されておらず、Mountain Lion 以降、ユーザーが XQuartz をダウンロードする必要もあります。

Mono は便利ですが、その WinForms 実装はそうではありません。OS X のサポートが重要な場合は、次のオプションがあります。

  1. 別のツールキット (GTK#、WX.Net など) を使用してください。
  2. Cocoa LibraryXCode を使用して DLL をビルドしPInvoke、C# からそれをビルドします。

最も安全な方法は後者ですが、ニーズが単純な場合は、別のツールキットを使用する方が簡単かもしれません。

于 2013-04-03T20:43:25.287 に答える