Freigeben über


Marshal.SizeOf-Methode: (Object)

 

Veröffentlicht: Oktober 2016

Gibt die nicht verwaltete Größe eines Objekts in Bytes zurück.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Syntax

[ComVisibleAttribute(true)]
public static int SizeOf(
    object structure
)
public:
[ComVisibleAttribute(true)]
static int SizeOf(
    Object^ structure
)
[<ComVisibleAttribute(true)>]
static member SizeOf : 
        structure:Object -> int
<ComVisibleAttribute(True)>
Public Shared Function SizeOf (
    structure As Object
) As Integer

Parameter

  • structure
    Type: System.Object

    Das Objekt, dessen Größe zurückgegeben werden soll.

Rückgabewert

Type: System.Int32

Die Größe des angegebenen Objekts in nicht verwaltetem Code.

Ausnahmen

Exception Condition
ArgumentNullException

Der structure-Parameter ist null.

Hinweise

Diese Methode akzeptiert eine Instanz einer Struktur, die ein Referenztyp oder ein geschachtelter Werttyp sein kann. Das Layout muss sequenziell oder explizit sein.

Die zurückgegebene Größe ist die Größe des nicht verwalteten Objekts. Die verwalteten und nicht verwalteten Größe eines Objekts können sich unterscheiden. Bei Zeichentypen wird die Größe von beeinflusst die CharSet Wert, der auf die Klasse angewendet.

Sie können die SizeOf Möglichkeit festzustellen, wie viel Speicher mithilfe der AllocHGlobal und AllocCoTaskMem Methoden.

Beispiele

Im folgenden Beispiel wird eine verwaltete Struktur erstellt, in den nicht verwalteten Speicher übertragen und anschließend zurück in den verwalteten Speicher übertragen. Dieses Beispiel verwendet die SizeOf Möglichkeit festzustellen, wie viel Speicher.

using System;
using System.Runtime.InteropServices;

public struct Point
{
    public int x;
    public int y;
}

class Example
{

    static void Main()
    {

        // Create a point struct.
        Point p;
        p.x = 1;
        p.y = 1;

        Console.WriteLine("The value of first point is " + p.x + " and " + p.y + ".");

        // Initialize unmanged memory to hold the struct.
        IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(p));

        try
        {

            // Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, false);

            // Create another point.
            Point anotherP;

            // Set this Point to the value of the 
            // Point in unmanaged memory. 
            anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point));

            Console.WriteLine("The value of new point is " + anotherP.x + " and " + anotherP.y + ".");

        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }



    }

}
Imports System
Imports System.Runtime.InteropServices



Public Structure Point
    Public x As Integer
    Public y As Integer
End Structure


Module Example


    Sub Main()

        ' Create a point struct.
        Dim p As Point
        p.x = 1
        p.y = 1

        Console.WriteLine("The value of first point is " + p.x.ToString + " and " + p.y.ToString + ".")

        ' Initialize unmanged memory to hold the struct.
        Dim pnt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(p))

        Try

            ' Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, False)

            ' Create another point.
            Dim anotherP As Point

            ' Set this Point to the value of the 
            ' Point in unmanaged memory. 
            anotherP = CType(Marshal.PtrToStructure(pnt, GetType(Point)), Point)

            Console.WriteLine("The value of new point is " + anotherP.x.ToString + " and " + anotherP.y.ToString + ".")

        Finally
            ' Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt)
        End Try

    End Sub
End Module

Versionsinformationen

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Siehe auch

CharSet
SizeOf Überladen
Marshal-Klasse
System.Runtime.InteropServices-Namespace

Zurück zum Anfang