美文网首页
Blittable 类型

Blittable 类型

作者: Justin_901e | 来源:发表于2019-07-19 20:44 被阅读0次

    Blittable 类型

    Blittable 类型是托管代码和本机代码中具有相同位级别表示形式的类型。 因此,无需将这些类型转换为其他格式即可往返本机代码进行封送,而且由于这样可以提高性能,应首选这些类型。

    byte, sbyte, short, ushort, int, uint, long, ulong, single, double

    Blittable 类型的非嵌套一维数组(例如,int[])

    具有实例字段只有 blittable 值类型的固定布局的结构和类

    固定的布局需要 [StructLayout(LayoutKind.Sequential)] 或 [StructLayout(LayoutKind.Explicit)]

    默认情况下结构为 LayoutKind.Sequential,类为 LayoutKind.Auto

    不是 blittable:

    bool

    有时为 blittable:

    char, string

    通过引用传递 blittable 类型时,这些类型只会被封送处理程序固定,而不会复制到中间缓冲区。 (类在本质上通过引用传递,结构在与 ref 或 out 结合使用时会通过引用传递。)

    如果 char 位于一维数组中,或者如果它是包含使用 CharSet = CharSet.Unicode 的 [StructLayout] 显式标记的类型的一部分,则该类型为 blittable。

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]publicstructUnicodeCharStruct{publiccharc;}

    如果 string 不包含在其他类型中,并且作为使用 [MarshalAs(UnmanagedType.LPWStr)] 标记的参数传递或 [DllImport] 已设置 CharSet = CharSet.Unicode,则该类型为 blittable。

    可以通过尝试创建固定的 GCHandle 来查看类型是否为 blittable。 如果该类型不是字符串或被视为 blittable,则 GCHandle.Alloc 将引发 ArgumentException。

    ✔️ 尽可能使结构为 blittable。

    相关文章

      网友评论

          本文标题:Blittable 类型

          本文链接:https://www.haomeiwen.com/subject/kihelctx.html