10

我有兴趣了解人们在 C/C++ 应用程序中嵌入单声道(.NET 的开源实现)的经验。如何分发这样的应用程序以及依赖项是什么?我已经在 OS X 上进行了测试,mono 是一个巨大的框架(数百 MB)。我的应用程序的用户是否都需要这个大框架,或者可以将其剥离或将所有内容编译到主可执行文件中。

我以前有在 C++ 应用程序中嵌入 Lua 的经验,而且效果非常好,因为我可以将整个 lua 解释器与我的主要可执行文件静态链接。所以我没有外部依赖。可以用单声道做类似的事情吗?

这里有任何 Lua 人可以评论他们如何发现 Mono 与 Lua 相比吗?

PS:通过嵌入,我的意思是一个 C++ 应用程序,它初始化一个单声道环境并加载一个 .NET 程序集并执行它,然后允许在程序集中的 C# 代码和主可执行文件中的 C++ 方法之间进行通信。

4

2 回答 2

6

您可能还应该查看 Mono 的Small Footprint页面,该页面描述了如何嵌入更小的运行时。哎呀,他们自己用月光做。

我希望这会有所帮助。

于 2009-02-19T09:44:01.360 回答
2

这是2岁的问题。所以现在情况可能会变得不同。

对我来说,最重要的一点是 GC。我为交互式应用程序和游戏嵌入了 Lua,因为需要增量 GC。目前 Lua 5.1 有精确的增量 GC,但我在 Mono 上找不到任何增量或精确 GC 的证据。所以内存会泄漏(即使它非常小!),应用程序会间歇性地挣扎。

人们说 GC 暂停可以通过调整一些参数和池化对象来解决,但正如我所经历的,如果没有任何在 GC 中随时间分布的 GC 负载方法,它永远无法解决。分代GC是一种分布算法,但它过于粗糙,几乎没有帮助。

因为您无法通过汇集代码中使用的对象而不是您的来控制生命周期模式或重用实例。(如基础类库)

所以我不推荐 C# 平台(至少目前是 Mono 或 .NET)用于交互式/(软)实时应用程序。


编辑

我不知道 Mono 或 .NET 上是否存在任何增量/并发方法 GC。如果您可以确定他们提供了那种 GC,那么当然可以使用 :)

于 2011-06-22T12:04:32.580 回答