Вопрос

Мне интересно услышать об опыте людей по внедрению mono (реализации .NET с открытым исходным кодом) в приложение C/C++.Как распространять такое приложение и каковы зависимости?Я тестировал OS X, и mono представляет собой огромную структуру (сотни МБ).Нужна ли всем пользователям моего приложения эта большая структура, или ее можно урезать или все скомпилировать в основной исполняемый файл.

Раньше у меня был опыт внедрения Lua в приложение на C++, и это работает очень хорошо, потому что я могу статически связать весь интерпретатор Lua с моим основным исполняемым файлом.Поэтому у меня нет внешних зависимостей.Можно ли сделать что-то подобное с моно?

Есть ли здесь пользователи Lua, которые могут прокомментировать, как они нашли моно по сравнению с Lua?

ПС:Под встраиванием я подразумеваю приложение C++, которое инициализирует моно-среду, загружает сборку .NET и выполняет ее, а затем обеспечивает связь между, скажем, кодом C# в сборке и методами C++ в основном исполняемом файле.

Это было полезно?

Решение

Вероятно, вам также стоит взглянуть на Mono Маленький след страница, описывающая, как можно встроить меньшую среду выполнения.Черт возьми, они делают это сами с Лунный свет.

Надеюсь, это поможет.

Другие советы

Это вопрос двухлетней давности.Так что сейчас ситуация может измениться.

Для меня самым важным моментом был GC.Я встроил Lua для интерактивных приложений и игр, потому что требовался инкрементальный сборщик мусора.В настоящее время Lua 5.1 имеет точный инкрементный сборщик мусора, но я не смог найти никаких доказательств инкрементального или точного сбора мусора в Mono.Таким образом, память будет утекать (даже если она очень маленькая!), а приложения будут периодически работать с ошибками.

Люди говорят, что паузу GC можно решить, настроив некоторые параметры и объединив объекты, но, по моему опыту, это никогда быть решено без каких-либо распределение нагрузки GC по времени подход в GC.Generational GC — это один из алгоритмов распределения, но он слишком груб и почти бесполезен.

Потому что вы не можете контролировать шаблон времени жизни или повторно использовать экземпляр, объединяя объекты, используемые в коде, который не принадлежит вам.(например, базовая библиотека классов)

Поэтому я не рекомендую платформу C# (Mono или .NET, по крайней мере, пока) для интерактивных/(мягких) приложений реального времени.


Редактировать

Я не знаю, представлен ли какой-либо инкрементный/параллельный сборщик мусора в Mono или .NET.Если вы уверены, что они предлагают такой тип GC, конечно, его можно использовать :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top