C# 区分short、int和long真的重要吗?

C# 区分short、int和long真的重要吗?,c#,types,C#,Types,在我的C#app中,我想知道使用short表示较小的数字,int表示较大的数字等是否真的很重要。内存消耗真的很重要吗?这取决于你如何使用它们以及你有多少内存。即使您一次只有少量内存,这也可能会驱动备份存储中的数据类型。这完全与您可以浪费的内存量有关。如果你不确定,这可能无关紧要。只有你才能判断内存消耗是否真的对你重要。在大多数情况下,这不会产生任何明显的区别 一般来说,我建议您使用int/Int32,这样您就可以不用担心了。如果在特定情况下确实需要使用short、long、byte、uint等,

在我的C#app中,我想知道使用short表示较小的数字,int表示较大的数字等是否真的很重要。内存消耗真的很重要吗?

这取决于你如何使用它们以及你有多少内存。即使您一次只有少量内存,这也可能会驱动备份存储中的数据类型。

这完全与您可以浪费的内存量有关。如果你不确定,这可能无关紧要。

只有你才能判断内存消耗是否真的对你重要。在大多数情况下,这不会产生任何明显的区别


一般来说,我建议您使用
int
/
Int32
,这样您就可以不用担心了。如果在特定情况下确实需要使用
short
long
byte
uint
等,那么就这样做。

对于不想从文件镜像某种结构的C应用程序,最好使用ints或任何您的原生格式。唯一重要的是,如果使用数以百万计条目的数组。即便如此,我还是会考虑int。

除非你把大量的这些元素打包在某种结构中,否则它根本不会影响内存消耗。使用特定整数类型的最佳原因是与API的兼容性。除此之外,只需确保您选择的类型具有足够的范围来覆盖您需要的值。除此之外,对于简单的局部变量,这并不重要。

简单的答案是,这并不重要

更复杂的答案是,这要视情况而定

显然,您需要选择一种能够保存数据结构而不会溢出的类型,即使只存储较小的数字,选择
int
可能是最明智的选择


但是,如果应用程序加载大量数据或在内存有限的设备上运行,则可能需要为某些值选择
short

基于存储的整数类型的内存消耗在桌面或web应用程序中可能不是问题。在游戏或移动设备应用程序中,这可能是一个更大的问题


然而,区分这些类型的真正原因是需要存储的数字类型。如果您的数字真的很大,或者精度很高,您可能需要使用
long
来存储它。

答案是:这取决于您。记忆是否重要完全取决于你。如果你正在编写一个存储和内存要求最低的小型应用程序,那么就不需要了。如果你是谷歌,在数千台服务器上存储了数十亿条记录,那么每个字节都会花一些钱。

有一些情况下我真的很费心选择

  • 当我有记忆限制时
  • 当我执行位移位操作时
  • 当我关心x86/x64的可移植性时
  • 其他每种情况都是int

    编辑:关于x86/x64

    在x86体系结构中,int是32位,但在x64中,int是64位

    如果您在任何地方都写“int”,并从一个体系结构移动到另一个体系结构,可能会导致问题。例如,您有一个32位的api,它导出一个长字符串。你把它转换成一个整数,一切都很好。但是,当你移动到x64,地狱打破了松散


    int是由您的体系结构定义的,因此当您更改体系结构时,您需要意识到它可能会导致潜在的问题

    在这里,情况的上下文非常重要。你不需要猜测它是否重要,我们这里讨论的是可量化的东西。我们知道使用short而不是int可以节省2个字节

    您估计在给定的时间点内存中的最大实例数是多少?如果有一百万,那么您可以节省约2Mb的Ram。那是大量的内存吗?同样,这取决于上下文,如果应用程序运行在具有4Gb内存的桌面上,您可能不会太在意2Mb


    如果内存中有数亿个实例,那么节省下来的内存将非常大,但如果是这种情况,您可能没有足够的ram来处理它,您可能不得不将此结构存储在磁盘上,并一次处理其中的一部分。

    Int32
    几乎可以处理任何事情。例外情况包括:

    • 如果你有特殊的需求,不同的类型显然更好。示例:如果您正在编写一个16位仿真器,
      Int16
      (aka:
      short
      )可能更好地表示一些内部构件
    • 当API需要某种类型时
    • 有一次,我有一个无效的
      int
      cast,VisualStudio的第一个建议是验证我的值是否小于无穷大。如果不使用预定义的常量,我就找不到合适的类型,所以我使用了
      ulong
      ,因为这是我在.NET 2.0中能找到的最接近的类型:)

    我不明白“当我关心x86/x64的可移植性时”。你能解释一下吗?我不知道C#,但在C中,amd64和x86上的int是32位。改变大小的是
    long
    。在C#-
    int
    中,x86 vs x64参数是错误的。int是
    系统的别名。Int32
    (请参阅)如果您想要平台本机大小,那么我认为您需要使用IntPtr。愚蠢的人不明白。。。[StructLayout(LayoutKind.Sequential,Pack=1)]您可以根据需要在派生类中创建基类并定义字段。