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?
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?
Antworten:
Hier ist ein Text von MSDN über nicht verwalteten Code .
Einige Bibliothekscodes müssen nicht verwalteten Code aufrufen (z. B. native Code-APIs wie Win32). Da dies bedeutet, dass der verwaltete Code außerhalb des Sicherheitsbereichs liegt, ist Vorsicht geboten.
Hier ist eine weitere kostenlose Erklärung zu verwaltetem Code:
Für Ihr Problem:
Ich denke, das 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!
Dies ist ein guter Artikel zu diesem Thema.
Zusammenfassen,
Ein Anwendungsprogramm, das in einer Laufzeit-Engine ausgeführt wird, die auf demselben Computer installiert ist. Die Anwendung kann ohne sie nicht ausgeführt werden. Die Laufzeitumgebung bietet die allgemeine Bibliothek von Softwareroutinen, die das Programm verwendet, und führt normalerweise eine Speicherverwaltung durch. Es kann auch eine Just-in-Time-Konvertierung (JIT) von Quellcode zu ausführbarem Code oder von einer Zwischensprache zu ausführbarem Code bereitstellen. Beispiele für Laufzeit-Engines sind Java, Visual Basic und .NETs Common Language Runtime (CLR). ( Lesen Sie mehr )
Ein ausführbares Programm, das von selbst ausgeführt wird. Das vom Betriebssystem aus gestartete Programm ruft die Softwareroutinen des Betriebssystems auf und verwendet sie, erfordert jedoch nicht die Verwendung eines anderen Softwaresystems. Assembler-Programme, 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. ( Lesen Sie mehr )
Wenn Sie an nicht verwalteten Code denken , denken Sie an maschinenspezifischen Code auf Maschinenebene. Wie x86-Assemblersprache. Nicht verwalteter (nativer) Code wird kompiliert und verknüpft, um direkt auf dem Prozessor ausgeführt zu werden, für den er entwickelt wurde, mit Ausnahme des gesamten Betriebssystems. Es ist nicht tragbar, aber es ist schnell. Sehr einfacher, abgespeckter Code.
Verwalteter Code ist alles von Java bis zu altem Interpretive BASIC oder alles, was unter .NET ausgeführt wird. Verwalteter Code wird normalerweise zu einem P-Code- oder Bytecode-Befehlssatz mittlerer Ebene kompiliert. Dies sind keine maschinenspezifischen Anweisungen, obwohl sie der Assemblersprache ähneln. Verwalteter Code isoliert das Programm von dem Computer, auf dem es ausgeführt wird, und erstellt eine sichere Grenze, in der der gesamte Speicher indirekt zugewiesen wird. Im Allgemeinen haben Sie keinen direkten Zugriff auf Computerressourcen wie Ports, Speicheradressraum, Stapel usw. Die Idee ist, in einer sichereren Umgebung zu laufen.
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 z. B. ein 'int') - auf einem 32-Bit-Computer - benötigen genau 4 Byte. 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.
In so wenigen Worten wie möglich:
Verwalteter Code ist das, was Compiler von C # .Net, VB.Net, F # .Net usw. erstellen. Es läuft auf der CLR, die unter anderem Dienste wie Garbage Collection, Referenzprüfung und vieles mehr bietet. Stellen Sie sich vor, mein Code wird von der CLR verwaltet.
Auf der anderen Seite wird nicht verwalteter Code direkt in Maschinencode kompiliert. Es wird nicht von CLR verwaltet.
Verwalteter Code:
Code, der unter einem "Kooperationsvertrag" mit der Common Language Runtime ausgeführt wird. Verwalteter Code muss die für die Laufzeit erforderlichen Metadaten bereitstellen, um Dienste wie Speicherverwaltung, sprachübergreifende Integration, Codezugriffssicherheit und automatische Lebensdauerkontrolle von Objekten bereitzustellen. Der gesamte Code, der auf der 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-Laufzeitumgebung mit minimalen Diensten ausgeführt (z. B. keine Speicherbereinigung, eingeschränktes Debugging usw.).
Referenz: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
Verwalteter Code wird in der Umgebung von CLR ausgeführt, dh in .NET-Laufzeit. Kurz gesagt, alle ILs sind verwalteter Code. Wenn Sie jedoch eine Software-Beispielkomponente von Drittanbietern, VB6 oder VC ++, verwenden, handelt es sich um nicht verwalteten Code, da .NET-Laufzeit (CLR) keine Kontrolle hat über die Quellcodeausführung der Sprache.
Verwalteter Code: - Code, dessen MSIL-Form (Intermediate Language) nach der Kompilierung des Sprachcompilers entwickelt und direkt vom CLR
aufgerufenen verwalteten Code ausgeführt wird. Beispiel: - Alle 61 Sprachcodes, die vom .net Framework unterstützt werden
Nicht verwalteter Code: - Code, der zuvor entwickelt wurde und .net
für den das MSIL-Formular nicht verfügbar ist und von CLR
direkt ausgeführt CLR
wird, leitet zum Betriebssystem weiter. Dies wird als nicht verwalteter Code bezeichnet.
Beispiel: -COM, Win32-APIs
Zunächst einmal verstehen, vor .NET framework
, Microsoft
wurden die Stand-alone - Produkte wie die Bereitstellung MFC (Visual C++), VB, FoxPro
usw.
Im Jahr 2002 kombinierte Microsoft seine Produkte und erstellte .NET Framework. 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
.NET Framework eingeführt, das den Code kompiliert, der aus einer unterstützten Sprache von .NET Framework stammt, und zusätzliche Funktionen wie memory mangement, garbage collection
usw. bereitstellt. Solche CLR-Funktionen waren jedoch vorher nicht direkt verfügbar.
Wenn Sie also eine Bibliothek / einen Code in .NET Framework (kompiliert mit CLR) erstellen, wird dies aufgerufen
Managed code
. Sie können diese Bibliothek in anderen .NET-Anwendungen / -Projekten weiter verwenden. Auch dort versteht CLR, wie sie zuvor kompiliert wurde, und bleibt daher Ihr Verwaltungscode.
OTOH Wenn Sie die Bibliotheken verwenden möchten, die vor .NET Framework geschrieben wurden, können Sie bestimmte Einschränkungen beachten. Denken Sie jedoch daran, dass CLR diesen Code jetzt nicht versteht und erneut kompiliert, da CLR zu diesem Zeitpunkt noch nicht vorhanden war . Und das wird genannt unmanaged code
. Bitte beachten Sie, dass Bibliotheken / Baugruppen, die von Dritten erstellt wurden, um bestimmte Funktionen / Tools bereitzustellen, auch als nicht verwalteter Code betrachtet werden können, wenn sie nicht CLR-kompatibel sind.
In Laienbegriffen, Verwalten von Code etwas, das Ihre CLR versteht und das sie zur weiteren Ausführung selbst kompilieren kann. In .NET Framework (aus jeder Sprache, die mit .NET Framework funktioniert) Wenn Code an CLR gesendet wird, liefert der Code einige Metadateninformationen, sodass CLR Ihnen die hier angegebenen Funktionen bereitstellen kann . Nur wenige von ihnen sind Garbage collection, Performance improvements, cross-language integration, memory management
usw.
OTOH, unveränderter Code ist maschinenspezifisch und einsatzbereit. Sie müssen nicht weiter verarbeitet werden.
Ab Pro C # 5 und .NET 4.5 Framework:
Verwalteter oder nicht verwalteter Code: Der vielleicht wichtigste Punkt zum Verständnis der C # -Sprache ist, dass sie Code erzeugen kann, der nur innerhalb der .NET-Laufzeit ausgeführt werden kann (Sie könnten C # niemals zum Erstellen eines nativen COM-Servers oder eines nicht verwalteten C / C ++ verwenden Anwendung). Offiziell ist der Begriff, der zur Beschreibung des Codes für die .NET-Laufzeit verwendet wird, verwalteter Code. Die binäre Einheit, 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.