10

C/C++ アプリケーションに mono (.NET のオープン ソース実装) を組み込んだ人々の経験に興味があります。そのようなアプリケーションをどのように配布し、依存関係は何ですか? 私は OS X でテストしましたが、mono は巨大なフレームワーク (数百 MB) として提供されます。私のアプリのすべてのユーザーがこの大きなフレームワークを必要としていますか、それともそれを取り除くか、すべてをメインの実行可能ファイルにコンパイルすることができますか?

私は以前、Lua を C++ アプリに埋め込んだ経験があり、メインの実行可能ファイルに lua インタープリター全体を静的にリンクできるため、これは非常にうまく機能します。したがって、外部依存関係はありません。モノで似たようなことをすることは可能ですか?

Lua と比較して mono を見つけた方法についてコメントできる Lua 関係者はいますか?

PS: 埋め込みとは、mono 環境を初期化し、.NET アセンブリをロードして実行し、アセンブリ内の C# コードとメイン実行可能ファイル内の C++ メソッドの間の通信を可能にする C++ アプリケーションを意味します。

4

2 に答える 2

6

また、より小さなランタイムを組み込む方法について説明しているMono のSmall Footprintページも参照してください。一体、彼らはMoonlightでそれを自分でやっています。

それが役立つことを願っています。

于 2009-02-19T09:44:01.360 に答える
2

これは2年前の質問です。そのため、現在は状況が異なる可能性があります。

私にとって、最も重要なポイントは GC でした。インクリメンタル GC が必要なため、対話型アプリとゲーム用に Lua を組み込みました。現在、Lua 5.1 には正確なインクリメンタル GC がありますが、Mono ではインクリメンタルまたは正確な GC の証拠を見つけることができませんでした。そのため、メモリがリークし (非常に小さい場合でも!)、アプリは断続的に苦労します。

GC の一時停止は、いくつかのパラメーターを調整してオブジェクトをプールすることで解決できると言われていますが、私が経験したように、GCで時間の経過に伴う GC 負荷の分散アプローチなしでは解決できません世代別 GC は分散アルゴリズムの 1 つですが、ラフすぎてほとんど役に立ちません。

自分のものではないコードで使用されているオブジェクトをプールすることによって、ライフタイム パターンを制御したり、インスタンスを再利用したりすることはできないためです。(基本的なクラス ライブラリなど)

そのため、インタラクティブ/(ソフト) リアルタイム アプリに C# プラットフォーム (少なくとも Mono または .NET) をお勧めしません。


編集

増分/同時アプローチ GC が Mono と .NET のどちらで表示されるかはわかりません。もちろん、彼らがGCの種類を提供していると確信できる場合は、使用しても問題ありません:)

于 2011-06-22T12:04:32.580 に答える