mono_jit_init を複数回呼び出す必要があるアプリケーションに取り組んでいます。初めてアプリケーションを実行すると、mono_jit_init を実行してから mono_jit_cleanup を実行するとすべて正常に動作しますが、もう一度 mono_jit_init を実行しようとすると問題が発生します (今回は別のランタイムをロードするためです [これが私の要件です :(])。プロセスで 1 回モノラル ランタイムを初期化する必要があると述べました.この問題を検索しましたが、有効な解決策が見つかりませんでした.この問題に対して何かできることはありますか?また、可能であれば誰か詳しく教えてください。 mono_jit_init 複数回がサポートされないのはなぜですか? GC クリーンアップの問題に関連していますか?
質問する
830 次
1 に答える
1
Mono のソース コードを見ると、クラッシュは Mono ランタイムの初期化方法 (ゼロ化された変数に依存) に関連しているようです。
mono_jit_init()
そのため、ランタイムの存続期間中に 1 回呼び出す必要があります。
これは、ライブラリが静的にロードされている場合はアプリケーションの寿命を意味しますが、Mono ランタイムが を介して動的にロードされている場合はロード/アンロード サイクルのみdl_open()
です。Mono 関数ポインターをキャッシュする余分な作業に加えて、この回避策は、Mono タスクを同時に実行するのには実用的ではない場合があります。
続行する別の方法 (および同時実行をサポートする方法) は、ランタイム コンテキストを で繰り返し作成する代わりに、後で使用するためにキャッシュすることmono_jit_init()
です。domain
unloading のような手の込んだことを行うには、専用の Mono を使用する必要がありますassemblies
。
解決策は必ずあります。ニーズに最適なものを見つけるには時間がかかります。
于 2012-08-31T07:25:15.137 に答える