2009-02-19 40 views
10

Tôi muốn nghe về trải nghiệm của mọi người bằng cách nhúng mono (triển khai mã nguồn mở .NET) trong ứng dụng C/C++. Làm cách nào để phân phối ứng dụng như vậy và phụ thuộc là gì? Tôi đã thử nghiệm trên OS X và mono đến như một khuôn khổ lớn (hàng trăm MB). Do người dùng ứng dụng của tôi đều cần khung công tác lớn này hay nó có thể bị tước bỏ hoặc mọi thứ được biên dịch vào thực thi chính.Nhúng: mono vs lua

Trước đây tôi có kinh nghiệm với việc nhúng Lua vào ứng dụng C++ và hoạt động thực sự tốt vì tôi có thể liên kết tĩnh toàn bộ trình thông dịch lua với tệp thực thi chính của tôi. Vì vậy, tôi không có phụ thuộc bên ngoài. Có thể làm điều gì đó tương tự với mono không?

Bất kỳ người Lua nào ở đây có thể nhận xét về cách họ tìm thấy mono so với Lua?

PS: Bằng cách nhúng, tôi có nghĩa là một ứng dụng C++ khởi tạo môi trường đơn và tải một assembly .NET và thực hiện nó và sau đó cho phép giao tiếp giữa mã C# trong assembly và các phương thức C++ trong thực thi chính.

Trả lời

6

Có lẽ bạn cũng nên xem trang Small Footprint của Mono mô tả cách bạn có thể nhúng thời gian chạy nhỏ hơn. Heck, họ tự làm với Moonlight.

Tôi hy vọng rằng sẽ giúp.

+0

Cảm ơn. Nếu tôi hiểu chính xác, là mscorlib.dll và JIT những điều duy nhất được yêu cầu để có được mono nhúng? Có cách nào để liên kết tĩnh mscorlib.dll? –

+0

Mono cho phép bạn liên kết tĩnh hoàn toàn mã của bạn, vì vậy có thể bạn thậm chí không cần JIT. Hãy xem triển khai iPhone của họ. –

2

Đây là câu hỏi 2 năm tuổi. Vì vậy, tình hình có thể trở nên khác biệt bây giờ.

Đối với tôi, điểm quan trọng nhất là GC. Tôi đã nhúng Lua cho các ứng dụng và trò chơi tương tác, vì yêu cầu GC gia tăng. Hiện tại Lua 5.1 có GC chính xác, gia tăng, nhưng tôi không thể tìm thấy bất kỳ bằng chứng nào về GC tăng dần hoặc chính xác trên Mono. Vì vậy, bộ nhớ sẽ bị rò rỉ (thậm chí nó rất nhỏ!), Và các ứng dụng sẽ đấu tranh liên tục.

dân nói GC tạm dừng có thể được giải quyết bằng cách điều chỉnh một số thông số và tổng hợp đối tượng, nhưng như tôi đã trải qua, Nó bao giờ được giải quyết mà không cần bất kỳ loại tải GC phân phối theo thời gian cách tiếp cận trong GC. Generational GC là một trong những thuật toán phân phối, nhưng nó quá thô, và hầu như không hữu ích.

Vì bạn không thể kiểm soát mẫu suốt đời hoặc trường hợp sử dụng lại bằng cách gộp các đối tượng được sử dụng trong mã không phải của bạn. (chẳng hạn như thư viện lớp cơ bản)

Vì vậy, tôi không khuyến nghị nền tảng C# (Mono hoặc .NET, ít nhất là) cho các ứng dụng thời gian thực tương tác/(mềm).


Sửa

Tôi không biết liệu bất kỳ gia tăng/đồng thời tiếp cận GC được trình bày trên Mono hoặc .NET. Nếu bạn có thể chắc chắn về họ cung cấp các loại GC, tất nhiên, nó là tốt để sử dụng :)

+2

Ngay cả với hơn 2000 trò chơi được xây dựng trên Mono trong Cửa hàng ứng dụng iOS? –

+0

@Dave Số lượng trò chơi trong C/C++ như thế nào? :) Số không chứng minh sự hiện diện của GC gia tăng. Nếu bạn không cần sự tương tác nghiêm trọng, bạn có thể sử dụng GC cũ. Nhưng nếu người dùng của bạn quan tâm đến khoảng thời gian tạm dừng rất nhỏ, bạn sẽ hối tiếc. – Eonil

+0

Tôi nghĩ điều này là vô nghĩa. Nếu những người khác có thể thực hiện một trò chơi trong Mono, yêu cầu của bạn để có một 'GC gia tăng' là tranh luận. –