Wie bestimme ich die Größe (in Bytes) einer beliebigen Objektinstanz in C#? Dies ist besonders nützlich, wenn Sie die Gesamtgröße verschiedener Objektsammlungen bestimmen müssen.
Objektgröße ermitteln
Um die Größe einer Instanz zu erhalten, können Sie eine Reihe undokumentierter Tricks anwenden. Beachten Sie, dass es nicht garantiert ist, dass diese Methoden immer funktionieren, und dass sie sich in zukünftigen .NET-Updates ändern können.
TypeHandle verwenden
Sie können die interne Struktur von TypeHandle verwenden, um auf das Feld „Basisinstanzgröße“ eines Typs zuzugreifen. So geht's:
<code class="language-csharp">object obj = new List<int>(); // 使用您需要的对象替换 RuntimeTypeHandle th = obj.GetType().TypeHandle; int size = *(*(int**)&th + 1); Console.WriteLine(size);</code>
Diese Methode stellt eine Basisinstanzgröße für die gängigsten Typen bereit. Allerdings erfordern Arrays, Strings und StringBuilder zusätzliche Berechnungen, um die darin enthaltenen Elemente zu berücksichtigen.
Überlegungen zur Erweiterungsmethode
Obwohl es keine bekannten Erweiterungsmethoden gibt, um die Objektgröße in Bytes explizit zu bestimmen, können Sie bei Bedarf selbst eine entwickeln.
Das obige ist der detaillierte Inhalt vonWie kann ich die Größe einer Objektinstanz in Bytes in C# bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!