2010-03-16 16 views
7

AFAIK, ngen przekształca MSIL w kod natywny (również określany jako pre-JIT), jednak nigdy nie zwracałem zbytniej uwagi na jego wpływ na wydajność uruchamiania. Ngenne aplikacje nadal wymagają .NET base class libraries (środowisko wykonawcze).Pakiet bibliotek .NET do uruchomienia aplikacji w maszynie .NET-less?

Ponieważ biblioteki klas podstawowych mają wszystko, czego potrzebują nasze zespoły .NET (poprawne?), Czy możliwe byłoby wysłanie bibliotek DLL do mojej aplikacji ngen'd, aby nie wymagało instalacji środowiska wykonawczego? (na przykład scenariusz dla większości komputerów z systemem Windows XP)

Aha, i proszę nie zawracaj sobie głowy wymienianiem Remotesoft's Salamander Linker lub Xenocode's Postbuild. Nie są one dla mojego (i wiele'S) obecnego budżetu (i wydają się po prostu pakiet ramy w wirtualnym enviroinment, co oznacza duże pobierania rozmiary i powolny czas uruchamiania wierzę)

EDIT:
Teraz wiem, NGEN nie robi tego, co myślałem, że to zrobiło.
Ale czy możliwe jest łączenie plików .NET z aplikacją bez użycia maszyny wirtualnej?

Odpowiedz

2

Wystarczy popatrzeć na Microsoft .NET Native:

.NET Język C# kompiluje do kodu maszynowego, który wykonuje jak C++. Będziesz nadal czerpał korzyści z wydajności i znajomości architektury .NET Framework dzięki doskonałej wydajności natywnego kodu.

It will be integrated in Visual Studio 2014.

+1

Na początku myślę "ah, inny facet wysyła mi link do" ngen' docs ", a teraz ... chichotam - że w końcu o tym pomyśleli! Zaczynając i działając szybciej i wymagając mniej pamięci, to po prostu niesamowite! Zastanawiam się, jak kompatybilny to będzie z już napisanym kodem, ale mimo, że nie mam czasu ani motywacji, aby wypróbować to w tej chwili, zasługujesz na zielony tyknięcie ponieważ jest to teraz oficjalna funkcja: –

+0

@CamiloMartin dziękuję, byłem bardzo podekscytowany, kiedy się o tym dowiedziałem.Myślę, że będzie bardzo solidny, ponieważ będzie dostarczany z VS 2014. –

+1

Kolejna rzecz, która dała mi exc to znaczy, że [C# będzie miał operatora '? .'] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3990187-add-operator-to-c). Jakie to jest świetne?! Sądzę, że w końcu przestali mieć nowe pomysły na spędzanie czasu rozwijając "kolejny zupełnie nowy sposób robienia równoległych/asynchronicznych" i teraz są zmuszeni pracować nad funkcjami, które nie mają nic wspólnego z wielowątkowością, lol. –

1

Zobacz How to compile a .NET application to native code? - Konsensus wygląda na to, że nie jest to możliwe.

+0

Tak, wiem, że nie można zamienić zestawu .NET na kod natywny (tj. Przetłumaczyć .NET na natywny), ale chcę tylko spakować biblioteki DLL środowiska wykonawczego, które aktualnie używam (ponieważ większość z nich to całkiem lekki, taki jak system.dll ma niewiele więcej niż 1 MB) i uruchamiać z nimi moją aplikację, z ładną możliwością uruchamiania więcej niż jednej aplikacji i/lub więcej niż jednej wersji bez ponownego pakowania całej rzeczy (co zarówno Salamander/Postbuild zrobić). Moją główną troską jest odseparowanie rozmiaru od frameworka i możliwość uruchomienia mojego kodu bez frameworka obecnego w maszynie. –

2

Tak nie działa Ngen. Pomija tylko krok kompilacji JIT. Wynikowy plik .ni.dll zawiera tylko kod maszynowy, a nie metadane zespołu. Musisz zachować oryginalny zestaw do tego. Zespoły środowiska CLR i .NET muszą być dostępne na komputerze docelowym, co wymaga zainstalowania .NET.

+0

Przepraszam, nigdy sam nie użyłem Ngen. Ale Xenocode wydaje się działać przez osadzenie podzbioru ramowego w wirtualnym systemie plików i uważam, że nie jest to pełny wirtualny system operacyjny, taki jak tryb XP w Win 7, więc może istnieć sposób na pominięcie absurdalnie długiej instalacji .NET i niektórych zbędnych zespołów. (do mojego wniosku) w takim projekcie. Poza tym łączność sieciowa lub nadmiarowe urządzenia do redystrybucji ponad 200 MB nie będą konieczne. –

+1

Możesz kierować na .NET Client Framework, to tylko 26 MB. Ponowne wynalezienie linkera jest technicznie wykonalne. Wysokie opłaty licencyjne, które pobierają za nie, są współmierne do wysiłków i ciężaru utrzymania zgodności z ramowymi wersjami. Jeśli jest to przeszkodą, kierowanie na platformę .NET jest prawdopodobnie błędnym podejściem. –

+0

Dziękuję za komentarz, ponieważ struktura klienta jest dobrym pomysłem i wygląda na to, że Microsoft nie dba o to, jak programiści powinni radzić sobie ze starszymi systemami operacyjnymi + różnymi wersjami framework = (gdybym musiał wyleczyć moje oprogramowanie o 26 MB bez instalacja-piekło ramy, byłoby już piękne = ( –

5

Nie możesz tego zrobić. Wiele podstawowych komponentów, takich jak garbage collector, jest częścią CLR (która jest częścią środowiska wykonawczego), więc aby pomyślnie uruchomić twoją aplikację, potrzebujesz zainstalowanego frameworka.

+0

Rozumiem, i naprawdę zrezygnowałbym z pomysłu, że można obejść całą konfigurację .NET, jeśli produkty takie jak Xenocode nie istniały. o mnie Wiem = P –

+0

@Camilo Martin, 90% komputerów z systemem Windows ma już zainstalowany .NET, a 65% ma zainstalowany dodatek .NET 3.5 SP1 (http://www.hanselman.com/blog/HowManyPCsInTheWorldHaveTheNETFrameworkInstalled.aspx). kłopot? –

+0

Cóż, nie wiem, skąd wziął te liczby, ponieważ uważam, że mniej niż 90% * na całym świecie * użytkowników ma .NET 2.0.W każdym razie, chcę tylko, aby moje oprogramowanie działało nawet bez .NET (lub powiedzieć , bez .NET 3 .5 SP1) zainstalowany. Te statystyki mogą pochodzić z dzienników małego bloga odwiedzanego przez ludzi świadomych technologii. Nie wspominając o tym, że z mojego doświadczenia wynika, że ​​większość komputerów firmowych/handlowych/przemysłowych nie może instalować oprogramowania, a wiele z nich działa na starszych systemach operacyjnych ( –

Powiązane problemy