Frage

Ich bin daran interessiert, von den Erfahrungen der Leute mit der Einbettung von Mono (Open-Source-Implementierung von .NET) in eine C/C++-Anwendung zu hören.Wie verteilt man eine solche Anwendung und welche Abhängigkeiten gibt es?Ich habe es unter OS X getestet und Mono ist ein riesiges Framework (Hunderte MB).Benötigen alle Benutzer meiner App dieses große Framework oder kann es reduziert oder alles in die ausführbare Hauptdatei kompiliert werden?

Ich habe bereits Erfahrung mit der Einbettung von Lua in eine C++-App, und das funktioniert wirklich gut, weil ich den gesamten Lua-Interpreter statisch mit meiner ausführbaren Hauptdatei verknüpfen kann.Ich habe also keine externen Abhängigkeiten.Ist es möglich, etwas Ähnliches mit Mono zu machen?

Gibt es hier Lua-Leute, die dazu Stellung nehmen können, wie sie Mono im Vergleich zu Lua fanden?

PS:Mit Einbettung meine ich eine C++-Anwendung, die eine Monoumgebung initialisiert, eine .NET-Assembly lädt und ausführt und dann die Kommunikation zwischen beispielsweise C#-Code in der Assembly und C++-Methoden in der ausführbaren Hauptdatei ermöglicht.

War es hilfreich?

Lösung

Sie sollten wahrscheinlich auch einen Blick auf Mono Small Footprint Seite, die beschreibt, wie Sie einbetten können eine kleinere Laufzeit. Heck, sie tun es, sich mit Moonlight .

Ich hoffe, das hilft.

Andere Tipps

Das ist eine 2 Jahre alte Frage.Die Situation könnte sich jetzt also ändern.

Der wichtigste Punkt für mich war GC.Ich habe Lua für interaktive Apps und Spiele eingebettet, da inkrementeller GC erforderlich ist.Derzeit verfügt Lua 5.1 über präzise, ​​inkrementelle GC, aber ich konnte auf Mono keinen Beweis für inkrementelle oder präzise GC finden.Es kommt also zu Speicherverlusten (selbst wenn diese sehr klein sind!), und Apps geraten zeitweise in Schwierigkeiten.

Die Leute sagen, dass die GC-Pause durch die Optimierung einiger Parameter und das Poolen von Objekten gelöst werden kann, aber wie ich erfahren habe, ist es so niemals ohne jegliche Art gelöst werden Verteilung der GC-Last über die Zeit Ansatz in der GC.Generational GC ist ein Verteilungsalgorithmus, aber er ist zu grob und fast nicht hilfreich.

Weil Sie das Lebensdauermuster oder die Wiederverwendung von Instanzen nicht steuern können, indem Sie die Objekte zusammenfassen, die in Code verwendet werden, der nicht Ihrer ist.(z. B. Basisklassenbibliothek)

Daher empfehle ich die C#-Plattform (zumindest bisher Mono oder .NET) nicht für interaktive/(Soft-)Echtzeit-Apps.


Bearbeiten

Ich weiß nicht, ob auf Mono oder .NET ein inkrementeller/gleichzeitiger GC-Ansatz verfügbar ist.Wenn Sie sicher sind, dass sie die Art von GC anbieten, ist die Verwendung natürlich in Ordnung :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top