fand ich einen Blog-Eintrag, dass auf dem Stapel anstelle des Haufens kann beschließen, setzen Array manchmal C# -Compiler schlägt vor:Entscheidet sich der C# -Compiler dafür, stackalloc selbst zu verwenden?
Improving Performance Through Stack Allocation (.NET Memory Management: Part 2)
Dieser Kerl, dass behauptet:
Der Compiler auch wird manchmal beschließen, Dinge selbst auf den Stapel zu legen. Ich habe ein Experiment mit TestStruct2 gemacht, in dem ich ihm einen unsicheren und normalen Kontext zugewiesen habe. Im unsicheren Kontext wurde das Array auf den Heap gestellt, aber im normalen Kontext, als ich in den Speicher schaute, war das Array tatsächlich auf dem Stack zugewiesen worden.
Kann jemand das bestätigen?
Ich habe versucht, sein Beispiel zu wiederholen, aber jedes Mal versuchte ich Array wurde auf dem Haufen zugeordnet.
Wenn C# -Compiler kann so einen Trick ohne Verwendung von "unsicheren" Schlüsselwort bin ich besonders daran interessiert. Ich habe einen Code, der an vielen kleinen Byte-Arrays arbeitet (8-10 Byte lang) und daher ist die Verwendung von Heap für jedes neue Byte [...] eine Verschwendung von Zeit und Arbeitsspeicher (insbesondere, dass jedes Objekt auf Heap 8 Byte Overhead hat) benötigt für Müllsammler).
EDIT: Ich möchte nur erklären, warum es mir wichtig ist:
Ich schreibe Bibliothek, die mit Gemalto.NET Smartcard in Verbindung steht, die .NET-Code arbeitet darin haben kann. Wenn ich eine Methode aufrufen, die etwas zurückgibt, gibt die Smartcard 8 Bytes zurück, die mir den genauen Typ des Rückgabewerts beschreiben. Diese 8 Bytes werden unter Verwendung von md5-Hash- und einigen Byte-Array-Verkettungen berechnet.
Problem ist, dass, wenn ich ein Array habe, das mir nicht bekannt ist, ich alle Typen in allen Assemblys, die in der Anwendung geladen werden, scannen muss, und für jeden muss ich diese 8 Byte berechnen, bis ich dasselbe Array finde.
Ich kenne keinen anderen Weg, den Typ zu finden, also versuche ich, es so viel wie möglich zu beschleunigen.
Weil thesee scannen kann einfach Pipelined sein schrieb ich Erweiterung Methode, die dieses Array nur einmal zugewiesen und Rendite verwendet. Danke für den Vorschlag :-) – SeeR