it-swarm.com.de

Was ist verwalteter oder nicht verwalteter Code in der Programmierung?

Ich verwende einen bestimmten Befehl in meinem C # -Code, der gut funktioniert. Es wird jedoch gesagt, dass es sich in "nicht verwaltetem" Code schlecht verhält.

Was ist verwalteter oder nicht verwalteter Code?

140
Pokus

Hier ist ein Text von MSDN über nicht verwalteter Code .

Einige Bibliothekscodes müssen nicht verwalteten Code aufrufen (z. B. native Code-APIs wie Win32). Da dies bedeutet, den Sicherheitsbereich für verwalteten Code zu verlassen, ist gebührende Vorsicht geboten.

Im Folgenden finden Sie eine zusätzliche Erklärung zu verwaltetem Code:

  • Code, der von der CLR ausgeführt wird.
  • Code, der auf die Common Language Runtime abzielt, die Grundlage von .NET Framework, wird als verwalteter Code bezeichnet.
  • Verwalteter Code liefert die Metadaten, die für die CLR erforderlich sind, um Dienste wie Speicherverwaltung, sprachübergreifende Integration, Codezugriffssicherheit und automatische Lebensdauerkontrolle von Objekten bereitzustellen. Jeder auf IL basierende Code wird als verwalteter Code ausgeführt.
  • Code, der in der CLI-Ausführungsumgebung ausgeführt wird.

Für dein Problem:

Ich denke, es liegt daran, dass NUnit Ihren Code für UnitTesting ausführt und möglicherweise einen Teil davon nicht verwaltet. Aber ich bin mir nicht sicher, also nimm das nicht für Gold. Ich bin sicher, dass Ihnen jemand mehr Informationen darüber geben kann. Ich hoffe es hilft!

70

This ist ein guter Artikel zum Thema.

Zusammenfassen,

  1. Verwalteter Code wird nicht zu Maschinencode kompiliert, sondern zu einer Zwischensprache, die von einem Dienst auf einer Maschine interpretiert und ausgeführt wird und daher innerhalb eines (hoffentlich) läuft !) sicheres Framework, das gefährliche Dinge wie Speicher und Threads für Sie handhabt. Im modernen Sprachgebrauch bedeutet dies häufig .NET, muss es aber nicht.

Ein Anwendungsprogramm, das in einem Laufzeitmodul ausgeführt wird, das auf demselben Computer installiert ist. Die Anwendung kann ohne sie nicht ausgeführt werden. Die Laufzeitumgebung stellt die allgemeine Bibliothek von Softwareroutinen bereit, die das Programm verwendet, und führt normalerweise die Speicherverwaltung durch. Es kann auch eine Just-in-Time-Konvertierung (JIT) von Quellcode in ausführbaren Code oder von einer Zwischensprache in ausführbaren Code bereitstellen. Java, Visual Basic und die Common Language Runtime (CLR) von .NET sind Beispiele für Laufzeitmodule. ( Weiterlesen )

  1. Nicht verwalteter Code wird zu Maschinencode kompiliert und daher direkt vom Betriebssystem ausgeführt. Es hat daher die Fähigkeit, schädliche/leistungsfähige Dinge zu tun, die Managed Code nicht tut. So hat früher alles funktioniert, also ist es normalerweise mit alten Dingen wie .dlls verbunden.

Ein ausführbares Programm, das von selbst ausgeführt wird. Vom Betriebssystem aus gestartet, ruft das Programm die Softwareroutinen im Betriebssystem auf und verwendet sie, erfordert jedoch keine Verwendung eines anderen Softwaresystems. Assemblersprachenprogramme, die in Maschinensprache zusammengestellt wurden, und C/C++ - Programme, die in Maschinensprache für eine bestimmte Plattform kompiliert wurden, sind Beispiele für nicht verwalteten Code. ( Read more )

  1. Nativer Code ist oft synonym mit Nicht verwaltet, aber nicht identisch.
186
annakata

Wenn Sie an nicht verwaltet denken, denken Sie an maschinenspezifischen Code auf Maschinenebene. Wie x86-Assemblersprache. Nicht verwalteter (systemeigener) Code wird kompiliert und verknüpft, um direkt auf dem Prozessor ausgeführt zu werden, für den er entwickelt wurde, wobei im Moment das gesamte Betriebssystemmaterial ausgeschlossen ist. Es ist nicht tragbar, aber es ist schnell. Sehr einfacher, abgespeckter Code.

Verwalteter Code ist alles von Java bis zu altem Interpretive BASIC oder allem, was unter .NET läuft. Verwalteter Code wird normalerweise zu einem P-Code oder Byte-Code einer Zwischenstufe kompiliert Dies sind keine maschinenspezifischen Anweisungen, obwohl sie der Assemblersprache ähneln. Verwalteter Code isoliert das Programm von der Maschine, auf der es ausgeführt wird, und erstellt eine sichere Grenze, in der der gesamte Arbeitsspeicher indirekt und im Allgemeinen von Ihnen zugewiesen wird Sie haben keinen direkten Zugriff auf Maschinenressourcen wie Ports, Speicheradressraum, Stapel usw. Die Idee ist, in einer sichereren Umgebung zu arbeiten.

Um beispielsweise von einer verwalteten Variablen in eine nicht verwaltete Variable zu konvertieren, müssen Sie zum eigentlichen Objekt selbst gelangen. Es ist wahrscheinlich in einer zusätzlichen Verpackung verpackt oder verpackt. Nicht verwaltete Variablen (wie zum Beispiel ein 'int') - auf einer 32-Bit-Maschine - benötigen genau 4 Bytes. Es gibt keinen Overhead oder zusätzliche Verpackung. Der Übergang von verwaltetem zu nicht verwaltetem Code - und wieder zurück - wird als "Marshalling" bezeichnet. Es ermöglicht Ihren Programmen, die Grenze zu überschreiten.

65
TJPowell

In so wenigen Worten wie möglich:

  • verwalteter Code = .NET-Programme
  • nicht verwalteter Code = "normale" Programme
22
Vilx-

Grundsätzlich handelt es sich bei nicht verwaltetem Code um Code, der nicht unter der .NET-CLR (auch bekannt als nicht VB.NET, C # usw.) ausgeführt wird. Ich vermute, dass NUnit einen Runner/Wrapper hat, der kein .NET-Code ist (auch bekannt als C++).

4
joegtp

Verwalteter Code:
Code, der im Rahmen eines "Kooperationsvertrags" mit der Common Language Runtime ausgeführt wird. Verwalteter Code muss die zur Laufzeit erforderlichen Metadaten bereitstellen, um Dienste wie Speicherverwaltung, sprachübergreifende Integration, Codezugriffssicherheit und automatische Lebensdauerkontrolle von Objekten bereitzustellen. Der gesamte Code, der auf Microsoft Intermediate Language (MSIL) basiert, wird als verwalteter Code ausgeführt.

Nicht verwalteter Code:
Code, der ohne Berücksichtigung der Konventionen und Anforderungen der Common Language Runtime erstellt wird. Nicht verwalteter Code wird in der Common Language Runtime-Umgebung mit minimalen Diensten ausgeführt (z. B. keine Garbage Collection, eingeschränktes Debugging usw.).

Referenz: http://www.dotnetspider.com/forum/11612-differenz zwischen verwaltetem und nicht verwaltetem Code.aspx

4
GMalla

NUnit lädt die Unit-Tests in eine separate AppDomain und ich gehe davon aus, dass der Einstiegspunkt nicht aufgerufen wird (wahrscheinlich nicht benötigt), daher ist der Eintrag Assembly null.

3
leppie

Verwalteter Code wird in der Umgebung von CLR ausgeführt, dh in der .NET-Laufzeit. Kurz gesagt, alle ILs sind verwalteter Code. Wenn Sie jedoch eine Drittanbieter-Software, beispielsweise VB6 oder VC++, verwenden, handelt es sich um nicht verwalteten Code, da die .NET-Laufzeit (CLR) keine Kontrolle hat über die Quellcode-Ausführung der Sprache.

2
chirag Makwana

Managed Code wird von C # .Net-, VB.Net-, F # .Net-Compilern usw. erstellt. Es läuft auf der CLR, die unter anderem Dienste wie Garbage Collection, Reference Checking und vieles mehr anbietet. Stellen Sie sich vor, mein Code wird von der CLR verwaltet.

Andererseits wird nicht verwaltet Code direkt in Maschinencode kompiliert. Es wird nicht von CLR verwaltet.

2
Arif

Verwalteter Code: - Code, dessen MSIL-Form (Intermediate Language) nach der Kompilierung des Sprachcompilers entwickelt und direkt von CLR ausgeführt wird, der als verwalteter Code bezeichnet wird. Beispiel: - Alle 61 Sprachcodes, die vom .net-Framework unterstützt werden

Nicht verwalteter Code: - Code, der vor .net Entwickelt wurde, für den das MSIL-Formular nicht verfügbar ist und der von CLR direkt ausgeführt wird, statt von CLR an das bekannte Betriebssystem weitergeleitet wird als nicht verwalteter Code.

zB: -COM, Win32 APIs

1
Ashok Narwal
  • verwaltet Code: Code in .NET-Sprache wie C #, VB.NET.
  • nManaged Code: Code nicht in .NET geschrieben und MSIL versteht nicht, was es ist und kann nicht unter CLR ausgeführt werden. Wie Steuerelemente von Drittanbietern, die wir in unseren .NET-Anwendungen verwendet haben, die nicht in .NET-Sprachen erstellt wurden.
1
Saket Kumar

Verstehen Sie dies, bevor .NET framework, Microsoft die eigenständigen Produkte wie MFC (Visual C++), VB, FoxPro usw. bereitstellte.

Im Jahr 2002 hat Microsoft seine Produkte kombiniert und .NET Framework erstellt. Jetzt gibt es einen Unterschied zwischen der vorherigen Ausführung von Code und der Verwaltung und Ausführung von Code in .NET Framework. Microsoft hat das Konzept von CLR mit .NET Framework eingeführt, das den Code aus allen unterstützten Sprachen von .NET Framework kompiliert und zusätzliche Funktionen wie memory mangement, garbage collection Usw. bereitstellt. Solche CLR-Funktionen waren jedoch nicht direkt verfügbar Vor.

Wenn Sie also eine Bibliothek/einen Code in .NET Framework (mit CLR kompiliert) erstellen, heißt dieser Managed code. Sie können diese Bibliothek in anderen .NET-Anwendungen/-Projekten weiterverwenden. Auch dort wird CLR verstehen, wie sie zuvor kompiliert wurde, und aus diesem Grund bleibt sie Ihr Verwaltungscode.

OTOH Wenn Sie die Bibliotheken verwenden möchten, die vor .NET Framework geschrieben wurden, können Sie dies mit bestimmten Einschränkungen tun. Denken Sie jedoch daran, dass CLR zu diesem Zeitpunkt noch nicht vorhanden war. Daher wird CLR diesen Code jetzt nicht mehr verstehen und erneut kompilieren . Und dies wird unmanaged code Genannt. Bitte beachten Sie, dass Bibliotheken/Baugruppen, die von Dritten erstellt wurden, um bestimmte Funktionen/Tools bereitzustellen, auch als nicht verwaltbarer Code betrachtet werden können, wenn sie nicht CLR-kompatibel sind.

Für Laien ist Code verwalten etwas, das Ihre CLR versteht und das sie für die weitere Ausführung selbst kompilieren kann. In .NET Framework (aus jeder Sprache, die in .NET Framework funktioniert) Wenn der Code an CLR gesendet wird, stellt der Code einige Metadateninformationen bereit, sodass CLR die angegebenen Funktionen bereitstellen kann hier . Nur wenige von ihnen sind Garbage collection, Performance improvements, cross-language integration, memory management Usw.

OTOH, nicht geänderter Code ist maschinenspezifisch und einsatzbereit. Eine weitere Verarbeitung ist nicht erforderlich.

0
Amnesh Goel

Aus Pro C # 5 und .NET 4.5 Framework:

Verwalteter im Vergleich zu nicht verwaltetem Code: Vielleicht ist der wichtigste Punkt zum Verständnis der C # -Sprache, dass sie Code erzeugen kann, der nur innerhalb der .NET-Laufzeit ausgeführt werden kann (Sie könnten niemals C # zum Erstellen einer systemeigenen COM verwenden Server oder eine nicht verwaltete C/C++ - Anwendung). Offiziell ist der Begriff, der zur Beschreibung des Codes für die .NET-Laufzeit verwendet wird, verwalteter Code. Die Binäreinheit, die den verwalteten Code enthält, wird als Assembly bezeichnet (weitere Details zu Assemblys in Kürze). Umgekehrt wird Code, der nicht direkt von der .NET-Laufzeit gehostet werden kann, als nicht verwalteter Code bezeichnet.

0
arush436