suchen
HeimBackend-EntwicklungC#.Net-TutorialEin detaillierter Blick auf Leistungsverbesserungen in .NET

.NET 4.6 bringt einige CLR-Funktionen mit sich, die sich auf Leistungsverbesserungen beziehen. Einige dieser Funktionen werden automatisch wirksam, während andere, wie SIMD und Async Local Storage, Änderungen an der Art und Weise erfordern, wie Anwendungen geschrieben werden.

SIMD

Das Mono-Team war schon immer stolz auf die Unterstützung von SIMD, der Single-Instruction-Stream-Multiple-Data-Stream-Funktion. SIMD ist ein CPU-Befehlssatz, der den gleichen Vorgang für bis zu 8 Werte gleichzeitig ausführen kann. Mit der Einführung von .NET CLR Version 4.6 können Windows-Entwickler diese Funktion endlich nutzen.

Um die Wirkung von SIMD tatsächlich zu beobachten, können Sie sich auf dieses Beispiel beziehen. Angenommen, Sie müssen zwei Arrays in der Form c[i] = a[i] + b[i] hinzufügen, um ein drittes Array zu erhalten. Durch die Verwendung von SIMD können Sie Code auf folgende Weise schreiben:

for (int i = 0; i < size; i += Vector.Count)
 {
     Vectorv = new Vector(A,i) + new Vector(B,i);
     v.CopyTo(C,i);
 }

Beachten Sie, wie diese Schleife um den Wert von Vector.Count erhöht wird, der je nach CPU-Typ 4 oder 8 sein kann. Der .NET JIT-Compiler generiert entsprechenden Code, um die Arrays je nach CPU mit einem Wert von 4 oder 8 stapelweise hinzuzufügen.

Diese Methode erscheint etwas umständlich, daher bietet Microsoft auch eine Reihe von Hilfsklassen an, darunter:

  • Matrix3x2-Struktur

  • Matrix4x4-Struktur

  • Flugzeugstruktur

  • Quaternionstruktur

  • Vektorklasse

  • Vektor(T)-Struktur

  • Vector2-Struktur

  • Vector3-Struktur

  • Vector4-Struktur

Deinstallation der Baugruppe

Ich fürchte, die meisten Entwickler wissen das nicht: .NET lädt oft dieselbe Assembly zweimal. Voraussetzung hierfür ist, dass .NET zunächst die IL-Version einer Assembly und anschließend die NGEN-Version (d. h. die vorkompilierte Version) derselben Assembly lädt. Dieser Ansatz stellt eine erhebliche Verschwendung von physischem Speicher dar, insbesondere bei großen 32-Bit-Anwendungen wie Visual Studio.

Sobald die CLR in .NET 4.6 die NGEN-Version einer Assembly lädt, löscht sie automatisch den von der entsprechenden IL-Version belegten Speicher.

Müllabfuhr

Zuvor haben wir den in .NET 4.0 eingeführten Garbage Collection-Verzögerungsmodus besprochen. Obwohl diese Methode viel zuverlässiger ist, als den GC für einen bestimmten Zeitraum vollständig anzuhalten, reicht sie für viele GC-Szenarien immer noch nicht aus.

In .NET 4.6 können Sie den Garbage Collector auf komplexere Weise vorübergehend anhalten. Mit der neuen TryStartNoGCRegion-Methode können Sie angeben, wie viel Speicher im Heap für kleine und große Objekte benötigt wird.

Wenn nicht genügend Speicher vorhanden ist, gibt die Laufzeit den Wert „false“ zurück oder stoppt die Ausführung, bis durch die GC-Reinigung genügend Speicher verfügbar ist. Sie können dieses Verhalten steuern, indem Sie ein Flag an TryStartNoGCRegion übergeben. Wenn Sie erfolgreich einen GC-freien Bereich betreten (GC ist bis zum Ende des Prozesses nicht zulässig), muss am Ende des Prozesses die Methode EndNoGCRegion aufgerufen werden.

In der offiziellen Dokumentation wird nicht angegeben, ob diese Methode Thread-sicher ist. Angesichts des Funktionsprinzips von GC sollten Sie jedoch vermeiden, dass zwei Prozesse gleichzeitig versuchen, den GC-Status zu ändern.

Eine weitere Verbesserung des GC ist die Art und Weise, wie er mit angehefteten Objekten umgeht (d. h. Objekte, die nach der Zuweisung nicht verschoben werden können). Obwohl dieser Aspekt in der Dokumentation etwas vage beschrieben wird, werden beim Fixieren der Position eines Objekts normalerweise auch die Positionen der benachbarten Objekte fixiert. Rich Lander schrieb in dem Artikel:

Der GC verarbeitet angeheftete Objekte optimierter, sodass der GC den Speicher um die angehefteten Objekte effektiver komprimieren kann. Bei umfangreichen Anwendungen, die eine große Anzahl von Pins verwenden, wird diese Änderung die Leistung der Anwendung erheblich verbessern.

GC zeige auch eine bessere Intelligenz bei der Nutzung des Gedächtnisses in früheren Generationen, schrieb Rich weiter:

Die Art und Weise, wie Objekte der Generation 1 zu Objekten der Generation 2 hochgestuft werden, wurde ebenfalls verbessert, um den Speicher effizienter zu nutzen. Bevor einer Generation neuer Speicherplatz zugewiesen wird, versucht der GC zunächst, den verfügbaren Speicherplatz zu nutzen. Gleichzeitig wird beim Erstellen von Objekten unter Nutzung des verfügbaren Speicherplatzbereichs ein neuer Algorithmus verwendet, sodass die Größe des neu zugewiesenen Speicherplatzes näher an der Größe des Objekts liegt als zuvor.

Asynchroner lokaler Speicher

Die letzte Verbesserung steht nicht in direktem Zusammenhang mit der Leistung, kann aber dennoch durch effektive Nutzung Optimierungsergebnisse erzielen. In den Tagen, bevor asynchrone APIs populär wurden, konnten Entwickler Thread Local Storage (TLS) nutzen, um Informationen zwischenzuspeichern. TLS verhält sich wie ein globales Objekt für einen bestimmten Thread, was bedeutet, dass Sie direkt auf Kontextinformationen zugreifen und diese zwischenspeichern können, ohne explizit ein Kontextobjekt übergeben zu müssen.

Im Async/Warten-Modus wird der lokale Thread-Speicher unbrauchbar. Denn jedes Mal, wenn „await“ aufgerufen wird, ist es möglich, zu einem anderen Thread zu springen. Und selbst wenn es Ihnen gelingt, diese Situation zu vermeiden, könnte anderer Code zu Ihrem Thread springen und die Informationen in TLS stören.

Die neue Version von .NET führt den Asynchronous Local Storage (ALS)-Mechanismus ein, um dieses Problem zu lösen. ALS entspricht semantisch dem Thread-Local-Storage, kann jedoch mit dem Aufruf vonwait entsprechende Sprünge durchführen. Diese Funktion wird über die generische Klasse AsyncLocal implementiert, die intern das CallContext-Objekt aufruft, um Daten zu speichern.


Das obige ist der detaillierte Inhalt vonEin detaillierter Blick auf Leistungsverbesserungen in .NET. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
C# .NET -Ökosystem: Frameworks, Bibliotheken und ToolsC# .NET -Ökosystem: Frameworks, Bibliotheken und ToolsApr 24, 2025 am 12:02 AM

Das C#.NET -Ökosystem bietet reichhaltige Frameworks und Bibliotheken, mit denen Entwickler Anwendungen effizient erstellen können. 1.asp.netcore wird verwendet, um Hochleistungs-Webanwendungen zu erstellen. Durch das Verständnis der Nutzung und Best Practices dieser Tools können Entwickler die Qualität und Leistung ihrer Anwendungen verbessern.

Bereitstellen von C# .NET-Anwendungen in Azure/AWS: Eine Schritt-für-Schritt-AnleitungBereitstellen von C# .NET-Anwendungen in Azure/AWS: Eine Schritt-für-Schritt-AnleitungApr 23, 2025 am 12:06 AM

Wie bereitete ich eine C# .NET -App für Azure oder AWS bereit? Die Antwort ist, AzureAppservice und Awselasticbeanstalk zu verwenden. 1. Automatisieren Sie bei Azure die Bereitstellung mit AzureAppservice und AzurePipelines. 2. Verwenden Sie bei AWS Amazon ElasticbeanSpalk und AWSLambda, um Bereitstellungen und serverlosen Computer zu implementieren.

C# .NET: Eine Einführung in die leistungsstarke ProgrammierspracheC# .NET: Eine Einführung in die leistungsstarke ProgrammierspracheApr 22, 2025 am 12:04 AM

Die Kombination von C# und .NET bietet Entwicklern eine leistungsstarke Programmierumgebung. 1) C# unterstützt Polymorphismus und asynchrone Programmierung, 2) .NET bietet plattformübergreifende Funktionen und gleichzeitige Verarbeitungsmechanismen, wodurch sie in der Entwicklung von Desktop-, Web- und mobilen Anwendungen häufig verwendet werden.

.NET Framework vs. C#: Dekodierung der Terminologie.NET Framework vs. C#: Dekodierung der TerminologieApr 21, 2025 am 12:05 AM

.NetFramework ist ein Software -Framework, und C# ist eine Programmiersprache. 1..NetFramework bietet Bibliotheken und Dienste, die Desktop-, Web- und mobile Anwendungsentwicklung unterstützen. 2.C# ist für .Netframework entwickelt und unterstützt moderne Programmierfunktionen. 3..NETFRAMEWORK verwaltet die Codeausführung über CLR, und der C# Code wird in IL zusammengestellt und wird von CLR ausgeführt. V. 5. Zu den häufigen Fehlern zählen Typenkonvertierung und asynchrone Programmieradrocken. Visualstudio -Tools sind zum Debuggen erforderlich.

Demystifizierung C# .NET: Ein Überblick für AnfängerDemystifizierung C# .NET: Ein Überblick für AnfängerApr 20, 2025 am 12:11 AM

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft entwickelt wurde, und .NET ist ein Entwicklungsrahmen von Microsoft. C# kombiniert die Leistung von C und die Einfachheit von Java und eignet sich zum Aufbau verschiedener Anwendungen. Das .NET -Framework unterstützt mehrere Sprachen, bietet Müllsammlungsmechanismen und vereinfacht die Speicherverwaltung.

C# und die .NET -Laufzeit: Wie sie zusammenarbeitenC# und die .NET -Laufzeit: Wie sie zusammenarbeitenApr 19, 2025 am 12:04 AM

C# und .NET-Laufzeit arbeiten eng zusammen, um Entwickler effiziente, leistungsstarke und plattformübergreifende Entwicklungsfähigkeiten zu befähigen. 1) C# ist eine vom Typ befindliche und objektorientierte Programmiersprache, die so konzipiert ist, dass sie nahtlos in das .NET-Framework integriert werden. 2) Die .NET-Laufzeit verwaltet die Ausführung von C# Code, bietet Müllsammlung, Type Sicherheit und andere Dienste und sorgt für einen effizienten und plattformübergreifenden Betrieb.

C# .NET -Entwicklung: Ein Anfängerleitfaden zum EinstiegC# .NET -Entwicklung: Ein Anfängerleitfaden zum EinstiegApr 18, 2025 am 12:17 AM

Um die C# .NET -Entwicklung zu starten, müssen Sie: 1. Verstehen Sie das Grundkenntnis von C# und die Kernkonzepte des .NET -Frameworks; 2. Meister Sie die grundlegenden Konzepte von Variablen, Datentypen, Kontrollstrukturen, Funktionen und Klassen; 3.. 4. Mit Debugging -Techniken und Leistungsoptimierungsmethoden für häufige Fehler vertraut sein. Mit diesen Schritten können Sie nach und nach in die Welt von C#.NET eindringen und effiziente Anwendungen schreiben.

C# und .net: Verständnis der Beziehung zwischen den beidenC# und .net: Verständnis der Beziehung zwischen den beidenApr 17, 2025 am 12:07 AM

Die Beziehung zwischen C# und .NET ist untrennbar miteinander verbunden, aber nicht dasselbe. C# ist eine Programmiersprache, während .NET eine Entwicklungsplattform ist. C# wird verwendet, um Code zu schreiben, in .NETs Intermediate Language (IL) zu kompilieren und von der .NET -Laufzeit (CLR) ausgeführt zu werden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),