使用小数据类型(例如short而不是int)是否会减少内存使用量?

时间:2011-06-01 08:23:08

标签: c# types memory-management short

我的问题基本上是关于C#编译器如何处理小数据类型的内存分配。我知道例如像add这样的运算符是在int上定义而不是在short上定义的,因此计算将被执行,好像short是int成员一样。

假设如下:

  • 没有与短数据类型选择相关联的业务逻辑/验证逻辑
  • 我们没有对不安全的代码做任何事情

尽可能使用短数据类型会减少应用程序的内存占用量,是否建议这样做?或者使用short等不值得努力,因为编译器例如分配int32的完整内存ammount并在进行算术时添加额外的强制转换。

非常感谢任何关于假定的运行时性能影响的链接。

相关问题:

Why should I use int instead of a byte or short in C#

Integer summing blues, short += short problem

5 个答案:

答案 0 :(得分:9)

从仅限内存的角度来看,使用short代替int会更好。原因很简单,short变量只需要内存中int变量的一半大小。 CLR不会在内存中将short扩展为int

然而,这种减少的内存消耗可能并且可能会显着降低应用程序的运行时性能。所有现代CPU的32位数字比16位数字表现更好。此外,在许多情况下,CLR必须在shortint之间进行转换。调用带有int个参数的方法。在采用这种方式之前,您还需要考虑许多其他性能因素。

我只会在应用程序的非常专用的位置和模块中进行更改,并且只有在您确实遇到可测量的内存不足时才会更改。

在某些情况下,您可以轻松地从int切换到short,而不会影响性能。一个例子是int的巨大数组,所有这些数组也适合short

答案 1 :(得分:1)

只有在程序中包含这些类型的非常大的数组(或构建在List<>等数组上的集合)或打包结构数组时,在内存使用方面才有意义由相同的组成。 “大”意味着这些阵列的总内存占用量占工作集的很大一部分可用内存。至于可行性,我冒昧地建议不要使用短类型,除非你的程序操作的数据是用short等明确指定的,或者数据量达到千兆字节。

答案 2 :(得分:1)

总之 - 是的。但是,您还应该注意内存对齐。您可能会发现Mastering C# structsMemory alignment of classes in c#?有用

答案 3 :(得分:0)

取决于您使用短裤的原因。另外,您是否分配了许多内存占用重要的变量?

如果该程序将用于移动设备或具有内存限制的设备,那么我可能会担心。但是,目前大多数机器至少运行1-2 GB的RAM,并且具有相当不错的双核处理器。此外,如今大多数移动设备正在成为野兽迷你电脑。如果您声明这种类型的机器会开始死亡,那么您的代码中就会出现问题。

然而,在回答这个问题时。如果你只需要一个2字节的变量填充它们就可以在内存有限的机器中声明很多4字节变量,那么你应该使用短路。

如果您执行复杂的计算,平方根等,或高值计算。那么你应该使用更多字节的变量,这样你就不会有丢失任何数据的风险。只需在需要时声明您需要的东西。如果您已完成它以确保C#清理它,如果您担心内存限制,请将其归零。

答案 4 :(得分:0)

说到机器语言,在注册表级别,我认为最好与注册表大小保持一致,因为大多数移动和算术功能都是在注册表边界完成的。如果机器具有32位注册表集,则最好与32位对齐。如果机器具有用于I / O操作的16位注册表,则最好与16位对齐以减少移动内容时的操作数。