Heim Backend-Entwicklung C#.Net-Tutorial Ein detaillierter Blick auf Leistungsverbesserungen in .NET

Ein detaillierter Blick auf Leistungsverbesserungen in .NET

Mar 09, 2017 pm 03:41 PM

.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);
 }
Nach dem Login kopieren

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!

Erklärung dieser Website
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

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Die Entwicklung von Technologien der künstlichen Intelligenz (KI) ist heute in vollem Gange und sie haben in verschiedenen Bereichen großes Potenzial und Einfluss gezeigt. Heute wird Dayao Ihnen 4 .NET Open-Source-KI-Modell-LLM-bezogene Projekt-Frameworks vorstellen und hofft, Ihnen einige Referenzen zu geben. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ist ein Open-Source-Softwareentwicklungskit (SDK), das für die Integration großer Sprachmodelle (LLM) wie OpenAI und Azure entwickelt wurde

Wie sind die Berufsaussichten von C#? Wie sind die Berufsaussichten von C#? Oct 19, 2023 am 11:02 AM

Ganz gleich, ob Sie Anfänger oder erfahrener Profi sind: Die Beherrschung von C# ebnet den Weg für Ihre Karriere.

Was sind die Leistungsverbesserungen und Vorteile von PHP8? Was sind die Leistungsverbesserungen und Vorteile von PHP8? Jan 13, 2024 pm 12:24 PM

Welche Leistungsverbesserungen und Vorteile bringt PHP8? Seit seiner Einführung im Jahr 1995 ist PHP eine der beliebtesten serverseitigen Skriptsprachen. PHP8 ist die neueste Version von PHP, die ab Ende 2020 offiziell veröffentlicht wird. PHP8 bringt viele spannende neue Funktionen und Verbesserungen, insbesondere im Hinblick auf die Leistung. In diesem Artikel werden einige der wichtigsten Leistungsverbesserungen und Vorteile von PHP8 vorgestellt und spezifische Codebeispiele bereitgestellt. JIT-Compiler PHP8 führt den JIT-Compiler (Just-In-Time) ein

Leistungsunterschiede zwischen Java-Framework und .NET-Framework Leistungsunterschiede zwischen Java-Framework und .NET-Framework Jun 03, 2024 am 09:19 AM

In Bezug auf die Verarbeitung von Anforderungen mit hoher Parallelität bietet .NETASP.NETCoreWebAPI eine bessere Leistung als JavaSpringMVC. Zu den Gründen gehören: AOT-Frühkompilierung, die die Startzeit verkürzt, wobei Entwickler für die Zuweisung und Freigabe von Objektspeicher verantwortlich sind.

.NET-Leistungsoptimierungstechnologie für Entwickler .NET-Leistungsoptimierungstechnologie für Entwickler Sep 12, 2023 am 10:43 AM

Wenn Sie ein .NET-Entwickler sind, müssen Sie sich der Bedeutung der Optimierung von Funktionalität und Leistung bei der Bereitstellung hochwertiger Software bewusst sein. Durch den fachgerechten Einsatz der bereitgestellten Ressourcen und die Verkürzung der Ladezeiten der Website schaffen Sie nicht nur ein angenehmes Erlebnis für Ihre Nutzer, sondern senken auch die Infrastrukturkosten.

Interpretation von Numpy-Versionsaktualisierungen: neue Funktionen und verbesserte Leistung Interpretation von Numpy-Versionsaktualisierungen: neue Funktionen und verbesserte Leistung Jan 19, 2024 am 10:11 AM

Mit der kontinuierlichen Weiterentwicklung der Datenwissenschaft und des Deep Learning ist Python eine der Mainstream-Programmiersprachen, und auch die wissenschaftliche Computerbibliothek Numpy wird ständig weiterentwickelt. Numpy hat kürzlich eine neue Version veröffentlicht, die einige neue Funktionen und Leistungsverbesserungen enthält. In diesem Beitrag tauchen wir tief in die neue Version von Numpy ein und stellen einige ihrer wichtigen Funktionen und Verbesserungen vor. Verbesserung der Shuffle-Funktion Vor numpy1.17.0 ordnete die Shuffle-Funktion die Array-Elemente in zufälliger Reihenfolge neu an. Ran

Verwendung des Vue Router Lazy-Loading-Routings und seine Auswirkung auf die Verbesserung der Seitenleistung Verwendung des Vue Router Lazy-Loading-Routings und seine Auswirkung auf die Verbesserung der Seitenleistung Sep 15, 2023 pm 02:10 PM

Verwendung des VueRouterLazy-Loading-Routings und seine Auswirkung auf die Verbesserung der Seitenleistung. Da Front-End-Anwendungen immer komplexer werden, wird die Verwaltung des Front-End-Routings immer wichtiger. Als Mainstream-Front-End-Framework bietet der integrierte VueRouter von Vue.js sehr leistungsstarke Routing-Management-Funktionen, die uns beim Erstellen flexibler und effizienter Single-Page-Anwendungen helfen können. Unter diesen ist VueRouterLazy-Loading eine sehr wichtige und praktische Funktion.

Beispiel für neue Funktionen in PHP8: Wie kann man statische Rückgabetypen und Code verwenden, um die Leistung zu verbessern? Beispiel für neue Funktionen in PHP8: Wie kann man statische Rückgabetypen und Code verwenden, um die Leistung zu verbessern? Sep 11, 2023 am 08:49 AM

PHP8 ist die neueste Version der PHP-Sprache und bringt viele aufregende neue Funktionen und Verbesserungen mit sich. Eine der wichtigen neuen Funktionen sind statische Rückgabetypen. In diesem Artikel untersuchen wir, wie Sie die Leistung mit statischen Rückgabetypen und Code verbessern können. Statische Rückgabetypen sind eine Funktion, die die Typsicherheit erhöht und es uns ermöglicht, den Typ des Rückgabewerts in der Deklaration von Funktionen und Methoden anzugeben. Vor PHP8 konnten wir Rückgabetypen nur mit dynamischen Typen oder Skalartypen deklarieren. Mithilfe statischer Rückgabetypen können wir den Rückgabetyp genauer spezifizieren

See all articles