Czy Mono jest gotowe na prime time? [zamknięte]

Czy ktoś używał mono, implementacji open source. NET w dużym lub średnim projekcie? Zastanawiam się, czy jest gotowy do realnego świata, środowisk produkcyjnych. Czy jest stabilny, szybki, kompatybilny,... wystarczy? Czy portowanie projektów do środowiska uruchomieniowego Mono wymaga dużo wysiłku, czy jest na tyle kompatybilne, że wystarczy pobrać i uruchomić już napisany kod dla środowiska uruchomieniowego Microsoftu?

Author: James A. Rosen, 2008-08-20

17 answers

Jest kilka scenariuszy do rozważenia: (a) jeśli portujesz istniejącą aplikację i zastanawiasz się, czy Mono jest wystarczająco dobre do tego zadania; (b) zaczynasz pisać jakiś nowy kod i chcesz wiedzieć, czy Mono jest wystarczająco dojrzałe.

W pierwszym przypadku możesz użyć narzędzia Mono Migration Analyzer (Moma), aby ocenić, jak daleko Twoja aplikacja jest od uruchomienia na Mono. Jeśli ocena wróci z klasą, powinieneś zacząć od testów i kontroli jakości i uzyskać gotowy do wysyłki.

Jeśli Twoja ocena wróci z raportem podkreślającym cechy, których brakuje lub znacznie różnią się semantyką W Mono, będziesz musiał ocenić, czy kod można dostosować, przepisać lub w najgorszym przypadku, czy Twoja aplikacja może pracować z ograniczoną funkcjonalnością.

Zgodnie z naszymi statystykami Moma na podstawie zgłoszeń użytkowników (to jest z pamięci) około 50% aplikacji działa po wyjęciu z pudełka, około 25% wymaga około tygodnia pracy (refaktoryzacja, adaptacja) kolejne 15% wymaga poważnego zaangażowania w przeróbkę fragmentów kodu, a reszta nie jest po prostu warta zawracania sobie głowy portowaniem, ponieważ są tak niesamowicie związane z Win32. W tym momencie albo zaczynasz od zera, albo decyzja biznesowa będzie napędzać wysiłek, aby Twój kod był przenośny, ale mówimy o miesiącach pracy (przynajmniej z raportów, które mamy).

Jeśli zaczynasz od zera, sytuacja jest o wiele prostsza, ponieważ będziesz używać tylko API, które są obecne w Mono. Tak długo, jak pozostaniesz przy obsługiwanym stosie (czyli prawie. NET 2.0, plus wszystkie podstawowe aktualizacje w 3.5, W tym LINQ i System.Core, plus każdy z mono cross-platform API) będzie dobrze.

Co jakiś czas możesz napotkać błędy W mono lub ograniczeniach i być może będziesz musiał obejść je, ale to nie różni się od innych systemów.

Co do przenośności: ASP.NET aplikacje są łatwiejsze do portowania, ponieważ te mają niewiele lub wcale zależności od Win32 i można nawet użyć SQL server lub innych popularnych baz danych (istnieje wiele dostawców baz danych w pakiecie z Mono).

Windows.Portowanie formularzy jest czasami trudniejsze, ponieważ deweloperzy lubią uciekać z piaskownicy. NET i P / wywoływać swoje mózgi, aby skonfigurować rzeczy tak przydatne, jak zmiana szybkości migania kursora wyrażona jako dwa punkty Beziera zakodowane w formie BCD w wParam. Albo coś w tym stylu.

 401
Author: miguel.de.icaza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-16 14:59:09

Ma dość rozległy zasięg aż do. NET 4.0, a nawet zawiera niektóre funkcje Z. NET 4.5 API, ale jest kilka obszarów, których nie zdecydowaliśmy się wdrożyć z powodu przestarzałych interfejsów API, tworzenia nowych alternatyw lub zbyt dużego zakresu. Następujące interfejsy API nie są dostępne w Mono:

  • Windows Presentation Foundation
  • Windows Workflow Foundation (żadna z dwóch wersji)
  • Entity Framework
  • GPW 1/GPW 2 "Dodatki" do standard Web Services stack

Dodatkowo nasza implementacja WCF jest ograniczona do tego, co obsługuje Silverlight.

Najprostszym sposobem sprawdzenia konkretnego projektu jest uruchomienie analizatora migracji Mono (MoMA). Zaletą jest to, że powiadomi zespół Mono o problemach, które uniemożliwią korzystanie z Mono (jeśli takie istnieją), co pozwala im priorytetyzować ich pracę.

Ostatnio uruchomiłem MoMA na SubSonic i znalazłem tylko jeden problem - dziwne użycie typów Nullable. To duży kod, więc relacja była imponująca.

Mono jest w aktywnym użyciu w kilku produktach komercyjnych, jak i open source. Jest on używany w niektórych dużych aplikacjach, takich jak[23]}Wikipedia i Mozilla Developer Center {16]}, i został użyty w aplikacjach wbudowanych, takich jak odtwarzacze MP3 Sansa i zasila tysiące opublikowanych gier.

Na poziomie języka, kompilator Mono jest w pełni zgodny z językiem C# 5.0 Specyfikacja .

 65
Author: Jon Galloway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-21 23:34:26

Po stronie pulpitu, Mono działa świetnie, jeśli zobowiązujesz się do używania GTK#. Okna.Implementacja formularzy jest nadal trochę błędna (na przykład TrayIcon nie działa), ale przebyła długą drogę. Poza tym GTK# jest lepszym zestawem narzędzi niż Windows Forms.

Na stronie internetowej Mono zaimplementowało dość ASP.NET aby uruchomić większość witryn idealnie. Trudność polega na znalezieniu hosta, który ma zainstalowany mod_mono na apache, lub zrobieniu tego samemu, jeśli masz dostęp do powłoki gospodarz.

Tak czy siak, Mono jest świetne i stabilne.

Najważniejsze rzeczy do zapamiętania podczas tworzenia programu wieloplatformowego:

  • użyj GTK# zamiast Windows.Formularze
  • upewnij siÄ™, że Twoje nazwy plików
  • użyj Path.Separator zamiast twardego kodowania "\", Użyj również Environment.NewLine zamiast "\n".
  • nie używaj żadnych wywoÅ‚aÅ„ P / wywoÅ‚anych do Win32 API.
  • nie używaj rejestru systemu Windows.
 38
Author: FlySwat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 12:33:39

Ja osobiście używam Mono w prime-time env. Uruchamiam mono serwery zajmujące się giga-bajtami zadań związanych z przetwarzaniem danych udp / tcp i nie mogłem być szczęśliwszy.

Są osobliwości, a jedną z najbardziej irytujących rzeczy jest to, że nie można po prostu "zbudować" plików msbuild ze względu na obecny stan Mono:

  • MonoDevelop (IDE) ma częściowe wsparcie dla msbuild, ale w zasadzie bÄ™dzie bork na każdym "prawdziwym" build conf poza prostym hello-world (niestandardowe zadania budowania, dynamiczne "properties" jak $(SolutionDir), real configuration to name a few dead-ends)
  • xbuild który powinien być mono-dostarczony-msbuild-fully-compatible-build-system jest jeszcze straszniejszy, wiÄ™c budowanie z linii poleceÅ„ jest gorszym doÅ›wiadczeniem niż używanie GUI, co jest bardzo "niekonwencjonalnym" stanem Unii dla Å›rodowisk Linuksowych...

Raz / podczas robienia rzeczy faktycznie zbudowanych, możesz zobaczyć kilka dzikusów nawet dla kodu, który powinien być obsługiwane jak:

  • kompilator borked na pewnych konstrukcjach
  • i pewne bardziej zaawansowane / nowe klasy. NET rzucajÄ…ce w ciebie nie oczekiwane bzdury (xlinq ktoÅ›?)
  • niektóre niedojrzaÅ‚e "funkcje" (limit 3GB sterty na x64... WTF!)

ale heaving powiedział, że ogólnie rzecz biorąc rzeczy zaczynają działać bardzo szybko, a rozwiązania/obejścia są obfite.

Po przejściu tych początkowych przeszkód, moje doświadczenie jest takie, że mono ROCKS, and keeps better with every iteration .

Miałem serwery działające z mono, Przetwarzające 300GB danych dziennie, z tonami P / wywołań i ogólnie mówiąc robi dużo pracy i pozostaje przez 5-6 miesięcy, nawet z "bleeding edge" mono.

Mam nadzieję, że to pomoże.

 23
Author: damageboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 12:21:17

Zalecenia dotyczÄ…ce zaakceptowanej odpowiedzi sÄ… teraz trochÄ™ nieaktualne.

  • implementacja windows forms jest teraz caÅ‚kiem niezÅ‚a. (Zobacz Paint-mono dla portu Paint.net która jest dość zaangażowana aplikacja Windows forms. Wszystko, co byÅ‚o wymagane, to warstwa emulacji dla niektórych wywoÅ‚aÅ„ P-Invoke i nieobsÅ‚ugiwanych wywoÅ‚aÅ„ systemowych).
  • Å›cieżka.PoÅ‚Ä…cz, jak również Å›cieżkÄ™.Separator do Å‚Ä…czenia Å›cieżek i nazw plików.
  • rejestr systemu windows jest w porzÄ…dku, o ile tylko używanie go do przechowywania i pobierania danych z aplikacji(tj. nie można uzyskać żadnych informacji o systemie Windows z niego, ponieważ jest to w zasadzie rejestr dla aplikacji Mono).
 21
Author: Kris Erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 16:53:49

Jeśli chcesz korzystać z WPF to masz pecha Mono obecnie nie planuje go wdrożyć.

Http://www.mono-project.com/WPF

 12
Author: trampster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-22 20:54:46

Cóż, mono jest świetne, ale z tego co widzę, jest niestabilne. To działa, ale błędy, gdy dajesz procesowi mono poważną pracę do wykonania.

TL;DR-nie stosować mono Jeśli:

  • użyj AppDomains (Assembly Load\Unload) w Å›rodowiskach wielowÄ…tkowych
  • Can 't sustain' let-it-fail model
  • doÅ›wiadczaj sporadycznych zdarzeÅ„ o dużym obciążeniu podczas pracy procesu
Więc, fakty.

Używamy mono-2.6.7 (. NET v 3.5) na RHEL5, Ubuntu i, do mojego punktu widok, jest to najbardziej stabilna wersja zbudowana przez Novell. Ma problem z rozładowaniem AppDomains( segfaults), jednak zawodzi bardzo rzadko i jest to zdecydowanie akceptowalne (przez nas).

Ok. Ale jeśli chcesz korzystać z funkcji. NET 4.0, musisz przejść do wersji 2.10.x lub 3.x, i tu zaczynają się problemy.

W porównaniu z 2.6.7, nowe wersje są po prostu nie do zaakceptowania. Napisałem prostą aplikację do testowania instalacji mono.

Jest tutaj, z instrukcja użycia: https://github.com/head-thrash/stress_test_mono

Używa wątków roboczych puli wątków. Worker ładuje dll do AppDomain i próbuje wykonać jakąś pracę matematyczną. Część prac jest wielowątkowa, część pojedyncza. Prawie cała praca jest związana z procesorem, chociaż są odczyty plików z dysku.

Wyniki nie są zbyt dobre. W rzeczywistości dla wersji 3.0.12:

  • sgen GC segfaults proces prawie natychmiast
  • mono z boehm żyje dÅ‚użej (od 2 do 5 godzin), ale segfaults ostatecznie

Jak wspomniano powyżej, sgen gc po prostu nie działa (mono zbudowane ze źródła):

* Assertion: should not be reached at sgen-scan-object.h:111

Stacktrace:


Native stacktrace:

    mono() [0x4ab0ad]
    /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0) [0x2b61ea830cb0]
    /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35) [0x2b61eaa74425]
    /lib/x86_64-linux-gnu/libc.so.6(abort+0x17b) [0x2b61eaa77b8b]
    mono() [0x62b49d]
    mono() [0x62b5d6]
    mono() [0x5d4f84]
    mono() [0x5cb0af]
    mono() [0x5cb2cc]
    mono() [0x5cccfd]
    mono() [0x5cd944]
    mono() [0x5d12b6]
    mono(mono_gc_collect+0x28) [0x5d16f8]
    mono(mono_domain_finalize+0x7c) [0x59fb1c]
    mono() [0x596ef0]
    mono() [0x616f13]
    mono() [0x626ee0]
    /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a) [0x2b61ea828e9a]
    /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x2b61eab31ccd]

Co do segfaulsów-na przykład (Ubuntu 13.04, mono zbudowane ze źródeł):

mono: mini-amd64.c:492: amd64_patch: Assertion `0' failed.
Stacktrace:
at <unknown> <0xffffffff>
at System.Collections.Generic.Dictionary`2.Init (int,System.Collections.Generic.IEqualityComparer`1<TKey>) [0x00012] in /home/bkmz/my/mono/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:264
at System.Collections.Generic.Dictionary`2..ctor () [0x00006] in /home/bkmz/my/mono/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:222
at System.Security.Cryptography.CryptoConfig/CryptoHandler..ctor (System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00014] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/Crypto
Config.cs:582
at System.Security.Cryptography.CryptoConfig.LoadConfig (string,System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00013] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoCo
nfig.cs:473
at System.Security.Cryptography.CryptoConfig.Initialize () [0x00697] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:457
at System.Security.Cryptography.CryptoConfig.CreateFromName (string,object[]) [0x00027] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:495
at System.Security.Cryptography.CryptoConfig.CreateFromName (string) [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:484
at System.Security.Cryptography.RandomNumberGenerator.Create (string) [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:59
at System.Security.Cryptography.RandomNumberGenerator.Create () [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:53
at System.Guid.NewGuid () [0x0001e] in /home/bkmz/my/mono/mcs/class/corlib/System/Guid.cs:492

Or (RHEL5, mono jest pobierane z RPM tutaj ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home%3A/vmas%3A/mono-centos5)

Assertion at mini.c:3783, condition `code' not met
Stacktrace:
at <unknown> <0xffffffff>
at System.IO.StreamReader.ReadBuffer () [0x00012] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.IO/StreamReader.cs:394
at System.IO.StreamReader.Peek () [0x00006] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.IO/StreamReader.cs:429
at Mono.Xml.SmallXmlParser.Peek () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/Mono.Xml/SmallXmlParser.cs:271
at Mono.Xml.SmallXmlParser.Parse (System.IO.TextReader,Mono.Xml.SmallXmlParser/IContentHandler) [0x00020] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/Mono.Xml/SmallXmlParser.cs:346
at System.Security.Cryptography.CryptoConfig.LoadConfig (string,System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00021] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptog
raphy/CryptoConfig.cs:475
at System.Security.Cryptography.CryptoConfig.Initialize () [0x00697] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:457
at System.Security.Cryptography.CryptoConfig.CreateFromName (string,object[]) [0x00027] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:495
at System.Security.Cryptography.CryptoConfig.CreateFromName (string) [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:484
at System.Security.Cryptography.RandomNumberGenerator.Create (string) [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:59
at System.Security.Cryptography.RandomNumberGenerator.Create () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:53
at System.Guid.NewGuid () [0x0001e] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System/Guid.cs:483
at System.Runtime.Remoting.RemotingServices.NewUri () [0x00020] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:356
at System.Runtime.Remoting.RemotingServices.Marshal (System.MarshalByRefObject,string,System.Type) [0x000ba] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:329
at System.AppDomain.GetMarshalledDomainObjRef () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System/AppDomain.cs:1363

Obie awarie są w jakiś sposób połączone z logiką AppDomains, więc powinieneś trzymać się od nich z daleka w mono.

BTW, testowany program pracował 24 godziny na komputerze z Windows w MS. NET 4.5 env bez żadnej awarii.

Podsumowując, chciałbym powiedzieć - używaj mono ostrożnie. Działa od pierwszego spojrzenia, ale może łatwo zawieść kiedykolwiek. Zostałbyś z kilkoma bazowymi zrzutami i poważną utratą wiary w projektach opensource.
 9
Author: head_thrash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-26 07:02:32

MoMA jest do tego świetnym narzędziem, jak ktoś inny zasugerował. Największymi źródłami niekompatybilności w dzisiejszych czasach są aplikacje, które Dllimportują (lub P / Invoke) do bibliotek Win32. Niektóre zestawy nie są zaimplementowane, ale większość z nich to tylko Windows i naprawdę nie miałoby to sensu w Linuksie. Myślę, że można śmiało powiedzieć, że większość ASP.NET aplikacje mogą działać na Mono z ograniczonymi modyfikacjami.

(Disclosure: przyczyniłem się do samego Mono, a także napisanych aplikacji, które działają na do góry.)

 5
Author: Joe Shaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 02:12:54

W wielu przypadkach możesz pobrać istniejący kod i po prostu uruchomić go na Mono, szczególnie jeśli przenosisz ASP.NET podanie.

W niektórych przypadkach możesz potrzebować zupełnie nowych sekcji kodu, aby to działało. Jeśli używasz systemu.Okna.Formularze, na przykład, aplikacja nie będzie działać w sposób niezmodyfikowany. Podobnie, jeśli używasz dowolnego kodu specyficznego dla systemu Windows (na przykład kodu dostępu do rejestru). Ale myślę, że najgorszym przestępcą jest kod UI. To jest szczególnie złe w systemach Macintosh.

 4
Author: TheSmurf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:17:22

Używaliśmy go do pracy w projekcie, który musiał działać pod Linuksem, ale ponownie używać niektórych bibliotek. NET, które zbudowaliśmy w zarządzanym C++. Byłem bardzo zaskoczony, jak dobrze to wyszło. Nasz główny program wykonywalny jest napisany w C# i możemy bez problemu odwoływać się do naszych zarządzanych binariów C++. Jedyną różnicą w kodzie C# pomiędzy Windowsem a Linuksem jest kod portu szeregowego RS232.

Jedyny wielki problem, o którym myślę, zdarzył się jakiś miesiąc temu. Linux build miał wyciek pamięci, którego nie było widać na Windows build. Po ręcznym debugowaniu (podstawowe profilery dla Mono na Linuksie niewiele pomogły), udało nam się zawęzić problem do konkretnego fragmentu kodu. Naprawiliśmy obejście, ale nadal muszę znaleźć trochę czasu, by wrócić i dowiedzieć się, co było przyczyną wycieku.

 4
Author: CHitchcock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 19:23:30

Czy wiesz jak dobra jest obsługa mono 2.0 preview Dla Windows Forms 2.0?

Z tego, co grałem, wydawało się stosunkowo kompletne i prawie użyteczne. To po prostu nie wygląda dobrze w niektórych miejscach i nadal jest trochę hit lub miss ogólnie. Zdumiało mnie, że działa tak dobrze, jak z niektórymi naszymi formami, choć szczerze.

 2
Author: jsight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:36:50

Yes it definitely is (if you ' re careful though) Wspieramy Mono w Ra-Ajax (Biblioteka Ajax znaleziona w http://ra-ajax.org ) i przeważnie nie mamy żadnych problemów. Musisz być ostrożny z niektórymi "najbardziej szalonymi rzeczami" z. Net, takimi jak GPW itp., a także prawdopodobnie kilka z Twoich istniejących projektów nie będzie w 100% kompatybilnych z Mono, ale nowe projekty, jeśli przetestujesz je podczas rozwoju, będą w większości kompatybilne bez problemów z Mono. I zysk z wspierania Linux itp poprzez używanie Mono jest naprawdę fajny;)

Spora część tajemnicy wspierania Mono moim zdaniem polega na używaniu odpowiednich narzędzi od samego początku, np. ActiveRecord, log4net, ra-ajax itp...

 2
Author: Thomas Hansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-23 17:35:00

Dla typu aplikacji, które budujemy mono niestety nie wydaje się gotowe do produkcji. Byliśmy pod wrażeniem go ogólnie i pod wrażeniem jego wydajności zarówno na Windows, jak i na maszynach EC2, jednak nasz program zawiesił się w wyniku błędów usuwania śmieci zarówno na Windows, jak i Linuksie.

Komunikat o błędzie brzmi: "fatal errors in GC: too many heap sections", oto link do kogoś innego doświadczającego problemu w nieco innym sposób:

Http://bugzilla.novell.com/show_bug.cgi?id=435906

Pierwszy kawałek kodu, który uruchomiliśmy w Mono, był prostym wyzwaniem programistycznym, które opracowaliśmy... Kod ładuje około 10MB danych do niektórych struktur danych( np. Hashsetów), a następnie uruchamia 10 zapytań do danych. Przeprowadziliśmy zapytania 100 razy, aby je zmierzyć i uzyskać średnią.

Kod rozbił się wokół 55. zapytania w systemie Windows. Na Linuksie to działało, ale jak tylko przenieśliśmy się do większego zbioru danych, to też by się rozbiła.

Ten kod jest bardzo prosty, np. umieść niektóre dane w Hashsetach, a następnie odpytywaj te Hashsety itp., wszystkie natywne c#, nic niebezpiecznego, żadnych wywołań API. Na Microsoft CLR nigdy się nie zawiesza i działa na ogromnych zestawach danych 1000 razy dobrze.

Jeden z naszych wysłał maila do Miguela i dodał kod, który spowodował problem, jeszcze nie odpowiedział. :(

Wydaje się również, że wiele innych osób napotkało ten problem bez rozwiązania - jedno rozwiązanie zostało zasugerowane do przekompiluj Mono z różnymi ustawieniami GC, ale to tylko wydaje się zwiększać próg, przed którym się zawiesza.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-24 11:58:34

Wystarczy sprawdzić www.plasticscm.com. wszystko (klient, serwer, GUI, narzędzia scalające) jest napisane na mono.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-26 12:17:59

To naprawdę zależy od przestrzeni nazw i klas, których używasz Z. NET framework. Byłem zainteresowany konwersją jednej z moich usług windows do działania na moim serwerze pocztowym, jakim jest Suse, ale napotkaliśmy kilka trudnych blokad z interfejsami API, które nie zostały w pełni zaimplementowane. Gdzieś na stronie Mono znajduje się wykres, który zawiera listę wszystkich klas i ich poziomu ukończenia. Jeśli twój wniosek jest objęty, przejdź do niego.

Jak każda inna aplikacja, do oczywiście prototypowanie i testowanie przed pełnym zaangażowaniem.

Kolejny problem, na który wpadliśmy, to licencjonowane oprogramowanie: jeśli odwołujesz się do cudzej biblioteki DLL, nie możesz sobie poradzić z niekompatybilnościami, które są zakopane w tym zestawie.

 1
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:21:50

Wyobrażam sobie, że jeśli masz aplikację z niektórymi komponentami stron trzecich, możesz być wypchany. Wątpię, żeby wielu sprzedawców rozwijało się z myślą o Mono

Przykład: http://community.devexpress.com/forums/p/55085/185853.aspx

 1
Author: Jamie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:38:48

Nie, mono nie jest gotowe do poważnej pracy. Napisałem kilka programów na Windows używając F# i uruchomiłem je na Mono. Program ten dość intensywnie wykorzystywał Dysk, Pamięć i procesor. Widziałem awarie w bibliotekach mono( kod zarządzany), awarie w kodzie natywnym i awarie w maszynie wirtualnej. Podczas pracy mono programy były co najmniej dwa razy wolniejsze niż w. Net w Windows i zużywały znacznie więcej pamięci. Trzymaj się z dala od mono do poważnej pracy.

 1
Author: Stefan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-12 21:43:03