我正在开发一些需要多次调用 mono_jit_init 的应用程序。当我第一次运行我的应用程序时,我执行 mono_jit_init 然后 mono_jit_cleanup 一切正常,当我再次尝试执行 mono_jit_init 时出现问题(这次加载不同的运行时[这是我的要求:(])。在单声道网站上它是提到我们应该在一个进程中初始化一次单声道运行时。我已经搜索了这个问题,但没有找到任何可行的解决方案。所以,我想知道有什么可以解决这个问题的吗?如果可能的话,任何人都可以详细说明为什么不支持mono_jit_init多次?它与一些GC清理问题有关吗?
问问题
830 次
1 回答
1
查看 Mono 源代码,崩溃似乎与 Mono 运行时的初始化方式有关(依赖于零变量)。
因此,您必须在运行时的生命周期中调用mono_jit_init()
一次。
如果库是静态加载的,这意味着您的应用程序的生命周期,但如果 Mono 运行时通过dl_open()
. 除了缓存 Mono 函数指针的额外工作外,这种解决方法对于运行并发 Mono 任务可能并不实用。
另一种继续(并且支持并发运行)的方法是缓存运行时上下文以供进一步使用,而不是使用mono_jit_init()
. 你将不得不使用专用的 Monodomain
来做一些花哨的事情,比如卸载assemblies
。
总有解决办法。找到最适合您需求的产品只是需要时间。
于 2012-08-31T07:25:15.137 回答