2012-05-18 41 views
0

我正在研究一些需要多次調用mono_jit_init的應用程序。當我第一次運行我的應用程序時,我做了mono_jit_init,然後mono_jit_cleanup一切正常,當我嘗試再次嘗試mono_jit_init時發生問題(這次加載不同的運行時間[這是我的要求:())。提到我們應該在一個進程中初始化單聲道運行時,我已經搜索了這個問題,並沒有找到任何可行的解決方案,所以我想知道這個問題有什麼可以做的嗎?如果可能的話,任何人都可以詳細說明爲什麼不支持mono_jit_init多次?這是否與一些GC清理問題?Multiple mono_jit_init/mono_jit_cleanup問題

回答

1

在Mono的源代碼中的崩潰似乎與對Mono運行時被初始化(依靠零變量)的方式尋找。

所以你必須打電話給mono_jit_init()一次在運行時的生活中。

這意味着如果庫是靜態加載的,但是隻有加載/卸載循環(如果Mono運行時通過dl_open()動態加載),則表示應用程序的生命週期。除了緩存單聲道函數指針的額外工作外,此解決方法可能不適用於運行併發單聲道任務。

繼續進行(並支持併發運行)的另一種方式是緩存運行時上下文以供進一步使用,而不是使用mono_jit_init()重複創建它。你將不得不使用專用的Mono domain做一些奇特的事情,如卸載assemblies

總是有一個解決方案。只需要一段時間才能找到最適合您的需求。