0

mono_jit_init を複数回呼び出す必要があるアプリケーションに取り組んでいます。初めてアプリケーションを実行すると、mono_jit_init を実行してから mono_jit_cleanup を実行するとすべて正常に動作しますが、もう一度 mono_jit_init を実行しようとすると問題が発生します (今回は別のランタイムをロードするためです [これが私の要件です :(])。プロセスで 1 回モノラル ランタイムを初期化する必要があると述べました.この問題を検索しましたが、有効な解決策が見つかりませんでした.この問題に対して何かできることはありますか?また、可能であれば誰か詳しく教えてください。 mono_jit_init 複数回がサポートされないのはなぜですか? GC クリーンアップの問題に関連していますか?

4

1 に答える 1

1

Mono のソース コードを見ると、クラッシュは Mono ランタイムの初期化方法 (ゼロ化された変数に依存) に関連しているようです。

mono_jit_init()そのため、ランタイムの存続期間中に 1 回呼び出す必要があります。

これは、ライブラリが静的にロードされている場合はアプリケーションの寿命を意味しますが、Mono ランタイムが を介して動的にロードされている場合はロード/アンロード サイクルのみdl_open()です。Mono 関数ポインターをキャッシュする余分な作業に加えて、この回避策は、Mono タスクを同時に実行するのには実用的ではない場合があります。

続行する別の方法 (および同時実行をサポートする方法) は、ランタイム コンテキストを で繰り返し作成する代わりに、後で使用するためにキャッシュすることmono_jit_init()です。domainunloading のような手の込んだことを行うには、専用の Mono を使用する必要がありますassemblies

解決策は必ずあります。ニーズに最適なものを見つけるには時間がかかります。

于 2012-08-31T07:25:15.137 に答える