C# 使用Int32或您需要的

C# 使用Int32或您需要的,c#,math,C#,Math,您是否应该在知道值不会高于32767的地方使用Int32 我想降低内存,hoever,在任何地方使用强制转换来执行简单的算术都是很烦人的 short a = 1; short result = a + 1; // Error short result = (short)(a + 1); // works but looks ugly when does lots of times 什么对整体应用程序性能更好?据我所知,尽可能使用int是一种很好的做法。int的大小在许多体系结构上等于一个字

您是否应该在知道值不会高于32767的地方使用Int32

我想降低内存,hoever,在任何地方使用强制转换来执行简单的算术都是很烦人的

short a = 1;

short result = a + 1; // Error

short result = (short)(a + 1); // works but looks ugly when does lots of times

什么对整体应用程序性能更好?

据我所知,尽可能使用int是一种很好的做法。int的大小在许多体系结构上等于一个字的大小,所以我认为在某些算术运算中使用short时,性能可能会有轻微的下降

如果要创建大型数组,那么使用更窄的类型(更少的字节)可以节省大量内存,因为数组的大小将是“类型宽度”*“元素数”+“开销”

然而,我很确定默认情况下,在类和结构中,它们将沿着整个单词边界打包,例如32bit=4bytes。短路仍将被压缩到4字节的空间中

但是,您可以使用结构布局在structs\classes中手动配置打包:

与任何绩效相关的问题一样:“不要思考-衡量”


从API的角度来看,必须不断地从短字符转换为整数等等,这可能是非常烦人的,因为您会发现大多数API都会使用整数。例如,除非您创建的是100个成千上万的成员,否则在任何现代机器上,这里和那里节省的少量字节的空间都不会有任何实际意义。我认为早熟优化的准则适用于这里。这可能会让你感觉更好,但你并没有从中得到任何特别可衡量的东西。IMO-只有在实际使用大量内存时才优化内存使用。

我使用小于int32的整数数据类型的三个原因:

  • 具有严重内存限制的系统
  • 大型阵列或类似阵列
  • 我认为这将使代码的目的更易于阅读和理解

  • 我通常使用普通的Windows应用程序,所以对我来说最重要的是第三个应用程序。

    很遗憾,短字符和字节没有数字后缀,比如长时间使用“L”…这个问题听起来用词不对。你的意思是“你应该在某些地方使用Int16吗…”几年前,当一个16位的应用程序被移植到32位的Windows时,我研究过这个问题。事实证明(至少在当时的英特尔体系结构上),16位数学在32位处理器上的速度实际上较慢。所以,除非你有一个庞大的数组(即,节省的内存大于性能损失),否则只需使用
    int
    。你如何看待MSDN中的这句话“堆上分配的对象越少,垃圾收集器所做的工作就越少。分配对象时,不要使用超出需要的向上舍入值,例如在只需要15个字节的情况下分配32个字节的数组。”?这个措辞有点奇怪,但实际上它只是提倡只分配所需的内容(我认为它们指的是字节[]数组)。也许这不是最好的例子来说明这一点-关注分配的对象的数量可能很重要。堆管理和垃圾收集有问题的一个很好的指标是查看性能计数器在GC中花费的时间“为了你的过程。如果这个值很高,比如说50%或更多,那么你的程序将大部分时间都花在垃圾收集上。