何时使用除int之外的数据类型?

时间:2011-05-10 02:33:52

标签: c# .net byte int short

我有一个项目,其中有许多具有许多属性的对象,其值始终小于60,100和255之类的小数。

我知道在byte上进行数学运算时,有必要转换结果。但除此之外,对所有这些属性使用byteshort是否有任何不利之处?或者另一种看待它的方式,使用byteshort而不是int是否有任何优势?

3 个答案:

答案 0 :(得分:7)

byteshort在互操作方案中非常有用,您需要的数据类型与本机代码所需的数据类型相同。

在处理非常大的数据集时,它们还可以节省内存。

答案 1 :(得分:1)

如果将它们存储在磁盘上,它们占用的空间更少。但它往往更多的是痛苦而不是值得。

答案 2 :(得分:1)

通常,使用有意义的类型。从数据验证,完整性和持久性角度来看,这可能会有所帮助。

通常,例如,bool实际上在32位体系结构上消耗4个字节,由于填充和对齐问题,在64位体系结构上可能是8个字节。默认情况下,大多数编译器将优化速度而不是代码大小或内存使用。对齐访问通常比未对齐访问更快。在.Net中,其中一些可以通过属性进行控制。据我所知,JIT编译器不会将多个布尔类型压缩为整数位字段。

同样适用于byte类型。 JIT编译器可以压缩多个字节类型(甚至重新排列存储顺序)以共享相同的单词(假设您没有使用StructLayoutFieldOffset等属性覆盖此类行为。

例如:

struct Foo
{
    string A;
    short B;
    string C;
    short D;
}

将引用类型视为指针,上面的大小可能是16(可能是14,但是与16对齐)。

Foo可以重新排列,以便订单实际上是:

struct Foo
{
   string A;
   string C;
   short B;
   short D;
}

以上可能大小为12,对齐为12或16(可能是16)。

...可能,在这个人为的例子中,由于重新排列,你可以节省4个字节。请注意,与典型的C ++编译器相比,.Net更重要的是重新调整成员。

(另外,我最近在我维护的C ++库中花了一些精力。我只能通过优化成员布局来减少55%的内存使用量。)