Was verwalteten oder nicht verwalteten Code in der Programmierung?
-
22-07-2019 - |
Frage
Ich verwende einen bestimmten Befehl in meinem C # -Code in, die gut funktioniert. Allerdings, so heißt es in "unmanaged" Code schlecht zu benehmen.
Was ist verwalteten oder nicht verwalteten Code?
Lösung
Hier ist ein Text von MSDN über nicht verwalteten Code .
Einige Bibliothek Code muss in den nicht verwalteten Code aufrufen (beispielsweise native Code-APIs, wie Win32). Da dies für verwalteten Code aus dem Sicherheitsbereich geht, ist die gebotene Vorsicht erforderlich.
Hier finden Sie einige andere kostenlose explication über Managed Code:
- Code, der von der CLR ausgeführt wird.
- Code, der die Common Language Runtime, die Grundlage des .NET Framework zielt, wird als verwalteten Code bekannt.
- Managed Code liefert die notwendigen Metadaten für die CLR Dienste zur Verfügung zu stellen, wie Speicherverwaltung, sprachübergreifende Integration, Codezugriffssicherheit und automatische Kontrolle der Lebensdauer von Objekten. Der gesamte Code auf Basis IL führt als verwalteten Code.
- Code, der unter der CLI-Ausführungsumgebung ausgeführt wird.
Für Ihr Problem:
Ich denke, es ist, weil NUnit Code für Unittesting ausführen und könnte einen Teil davon hat, die nicht verwaltet ist. Aber ich bin nicht sicher, es, so nehmen Sie nicht diese für Gold. Ich bin sicher, dass jemand in der Lage sein, finden Sie weitere Informationen darüber zu geben. Hoffe, es hilft!
Andere Tipps
Dieses ist ein guter Artikel über das Thema.
Um es zusammenzufassen,
- Managed Code ist nicht in Maschinencode, sondern auf eine Zwischensprache kompiliert, die von einigem Service auf einer Maschine und ausgeführt interpretiert und daher wird in ein (hoffentlich!) Betrieb sicheren Rahmen, die gefährlichen Dinge Griffe wie Speicher und Threads für Sie. Im modernen Sprachgebrauch bedeutet dies häufig .NET aber muss nicht.
Ein Anwendungsprogramm, das in einer Laufzeit-Engine ausgeführt wird in der gleichen Maschine installiert. Die Anwendung kann nicht ohne sie laufen. Die Laufzeitumgebung stellt die allgemeine Bibliothek von Software Routinen, die vom Programm verwendet werden und in der Regel führt einen Speicher Verwaltung. Es kann auch Just-in-Time (JIT) Umwandlung liefert aus Quellcode zu ausführbarem Code oder aus einer Zwischensprache ausführbarer Code. Java, Visual Basic und Common Language Runtime .NET (CLR) sind Beispiele für Laufzeitmotoren. ( Lesen Sie mehr )
- Unmanaged Code ist in Maschinencode kompiliert und daher von den OS direkt ausgeführt. Es hat daher die Fähigkeit schädlich / mächtige Dinge Managed Code zu tun nicht. Dies ist, wie alles funktioniert verwendet, so ist es normalerweise mit alten Sachen wie .dlls verbunden.
Ein ausführbares Programm, das von selbst läuft. von dem Betrieb gestartet System ruft das Programm auf und verwendet die Software-Routinen in der System arbeitet, aber seine nicht ein anderes Software-System erfordern, benutzt. Assemblersprache Programme, die in Maschine zusammengebaut wurden Sprache und C / C ++ Programme für eine in Maschinensprache übersetzt bestimmte Plattform sind Beispiele für nicht verwalteten Code. ( lesen mehr )
- Native Code ist oft mit Unmanaged auch, aber nicht identisch ist.
Wenn Sie denken, von nicht verwalteten , denken maschinenspezifische, maschinennahen Code. Wie x86-Assembler-Sprache. Unmanaged (nativ) Code kompiliert und direkt auf dem Prozessor es wurde ausgeführt verknüpft entworfen, ohne alle OS Sachen für den Moment. Es ist nicht tragbar, aber es ist schnell. Sehr einfach, abgespeckte Code.
Managed Code ist alles von Java zu alt interpretierenden BASIC, oder alles, was unter .NET läuft. Managed Code wird typischerweise auf ein Zwischenniveau zusammengestellt P-Code oder Byte-Code-Satz von Anweisungen. Diese sind nicht maschinenspezifische Befehle, obwohl sie Assemblersprache ähnlich aussehen. Managed Code dämmt das Programm von der Maschine auf es läuft, und stellt eine sichere Grenze, in dem alle Speicher indirekt zugeordnet sind, und allgemein gesprochen, Sie haben keinen direkten Zugriff auf Computerressourcen wie Ports, Speicheradressraum, den Stapel, etc . Die Idee ist, in einer sichereren Umgebung ausgeführt werden.
von einem verwalteten Variable zu konvertieren, sagen wir, zu einem nicht verwalteten ein, müssen Sie das eigentliche Objekt selbst bekommen. Es ist wahrscheinlich in einigen zusätzlichen Verpackung eingewickelt oder verpackt. Nicht verwalteten Variablen (wie eine ‚int‘, sagen wir) - auf einer 32-Bit-Maschine - dauert genau 4 Byte. Es gibt keinen Overhead oder zusätzliche Verpackung. Der Prozess von zu verwaltenden nicht verwalteten Code gehen - und wieder zurück - wird als „ Serialisieren “. Es ermöglicht Ihre Programme, um die Grenze zu überqueren.
In so wenigen Worten wie möglich:
- verwalteten Code = .NET-Programme
- nicht verwalteten Code = "normal" Programme
Im Grunde nicht verwalteten Code ist Code, der (auch bekannt als nicht VB.NET, C #, etc.) nicht unter der .NET CLR laufen. Meine Vermutung ist, dass NUnit einen Läufer / Wrapper hat, die nicht .NET-Code ist (auch bekannt als C ++).
Managed Code:
Code, der unter einem „Kooperationsvertrag“ läuft mit die Common Language Runtime. Managed Code muss die Metadaten liefern erforderlich, dass die Laufzeitdienste zur Verfügung zu stellen, wie Speicher Management, sprachübergreifende Integration, Codezugriffssicherheit und automatische Kontrolle der Lebensdauer von Objekten. Der gesamte Code auf Basis von Microsoft Zwischensprache (MSIL) ausführt als verwaltete Code.Un-Managed-Code:
Code, der ohne Rücksicht auf die erstellt wird, Konventionen und Anforderungen der Common Language Runtime. Unmanaged Code ausführt in der Common Language Runtime-Umgebung mit minimalem (Dienstleistungen zum Beispiel keine Müllabfuhr, begrenzt Debuggen und usw.).
Referenz: http: // www. dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
NUnit lädt die Unit-Tests in einer separaten AppDomain, und ich nehme an dem Einstiegspunkt nicht (wahrscheinlich nicht erforderlich) genannt zu werden, damit der Eintrag Baugruppe ist null.
Managed Code ist, was C # .Net, VB.Net, F # .Net etc Compiler erstellen. Es läuft auf der CLR, die unter anderen Dienste wie Garbage Collection bietet und Referenzprüfung und vieles mehr. denkt also davon, wie mein Code von der CLR verwaltet wird.
Auf der anderen Seite, nicht verwaltete Code kompiliert direkt in Maschinencode. Es verwaltet nicht durch CLR.
Managed Code läuft in der Umgebung von CLR heißt .NET runtime.In kurz alle IL verwaltet code.But, wenn Sie einige Software von Drittanbietern Beispiel VB6 oder VC ++ Komponente verwenden sie sind nicht verwalteten Code als .NET-Runtime (CLR) keine Kontrolle über die Source-Code-Ausführung die Sprache.
Managed Code: - Kodex, die MSIL (Zwischensprache) Form nach der Sprache Compiler Kompilierung entwickelt und direkt von CLR
genannt verwalteten Code ausgeführt.
zB: - Alle von .net Framework unterstützt 61 Sprachcode
Unmanaged Code: -. Code, der für die vor .net
entwickelte MSIL Form nicht zur Verfügung steht und es von CLR
ausgeführt wird direkt vielmehr wird CLR
zu Betriebssystem umleiten dies als nicht verwalteten Code bekannt ist
zB: -KOM, Win32-API
- Managed Code:. Code in .NET-Sprache geschrieben wie C #, VB.NET
- Nicht verwaltete Code: Code nicht in .NET-Sprache geschrieben und MSIL tut verstehen nicht, was es ist und kann nicht ausgeführt werden unter CLR; wie Steuerelemente von Drittanbietern haben wir in unseren .NET-Anwendungen, die in .NET-Sprachen nicht erstellt.
Zunächst einmal verstehen, bevor .NET framework
waren Microsoft
die Stand-alone-Produkte bieten wie MFC (Visual C++), VB, FoxPro
usw.
Im Jahr 2002 kombiniert Microsoft seine Produkte und machte .NET Framework. Jetzt gibt es einen Unterschied zwischen dem, wie Code ausgeführt wurde, bevor und wie Code verwaltet und in .NET Framework ausgeführt. Microsoft eingeführtes Konzept der CLR
mit .NET Framework, das der Code von jedem unterstützten lanugague von .NET-Framework kommt kompiliert und bietet zusätzliche Funktionalitäten wie memory mangement, garbage collection
etc. Aber, wie CLR Funktionen waren direkt vor nicht zur Verfügung.
Wenn Sie also Bibliothek / Code in .NET Framework erstellen (kompiliert mit CLR) dann ist das
Managed code
genannt. Sie können diese Bibliothek verwenden weiter in anderem .NET-Anwendung / Projekt, und auch dort wird CLR verstehen, wie es kompiliert wurde, bevor, und das ist, warum es bleibt Ihre verwalten Code.
OTOH wenn Sie die Bibliotheken verwenden mögen, die vor dem .NET-Framework geschrieben wurden, dann können Sie mit gewissen Einschränkungen tun, aber nicht vergessen, da CLR zu diesem Zeitpunkt nicht da war, so jetzt, CLR nicht verstehen und übersetzen dieser Code erneut. Und dies wird unmanaged code
genannt. Bitte beachten Sie, dass, Bibliotheken / assembilies von einigen Dritten erstellt bestimmten Funktionen zur Verfügung zu stellen / Werkzeug kann auch als unmanage Code angesehen werden, wenn nicht CLR compatiblie ist.
In Laien ausgedrückt, Verwalten Code ist etwas, was Ihre CLR versteht und es auf eigene für die weitere Ausführung zusammenstellen können. In .NET Framework (von jeder Sprache, das ist auf .NET-Framework arbeiten) Wenn Code geht einige Meta-Daten Informationen dann Code Versorgung CLR, so dass CLR zur Verfügung stellen kann Ihnen angegebenen Merkmale hier . Nur wenige von ihnen sind Garbage collection, Performance improvements, cross-language integration, memory management
etc.
OTOH, unmanged Code ist etwas Bestimmtes zu Maschine und einsatzbereit, keine Notwendigkeit, sie weiter zu verarbeiten.
Von Pro C # 5 und .NET 4.5 Framework:
Managed vs Unmanaged Code: Der vielleicht wichtigste Punkt über die C # Sprache zu verstehen ist, dass sie Code erzeugen kann, dass nur innerhalb der .NET-Laufzeit ausführen kann (man könnte nie C # verwenden, um einen nativen COM-Server oder ein bauen nicht verwalteten C / C ++ Applikation). Offiziell gesagt, verwendet der Begriff, den Code zu beschreiben, die Targeting .NET Runtime-Code verwaltet. Die binäre Einheit, die das verwaltete Code enthält, ist eine Anordnung bezeichnet (Weitere Details zu den Baugruppen in nur ein bisschen). Im Gegensatz dazu Code, der nicht direkt von .NET gehostet werden kann Laufzeit ist nicht verwalteten Code bezeichnet wird.