【发布时间】:2011-04-13 07:53:42
【问题描述】:
在我的 C# 应用程序中,我想知道对较小的数字使用 short 是否真的很重要,对较大的数字使用 int 等是否真的很重要。内存消耗真的很重要吗?
【问题讨论】:
-
愚蠢的人不懂... [StructLayout(LayoutKind.Sequential, Pack = 1)] 你可以根据需要在派生中创建基类和定义字段。
在我的 C# 应用程序中,我想知道对较小的数字使用 short 是否真的很重要,对较大的数字使用 int 等是否真的很重要。内存消耗真的很重要吗?
【问题讨论】:
Int32 几乎适用于任何事情。例外情况包括:
Int16(又名:short)可能会更好地代表一些内部结构int 演员表,Visual Studio 的第一个建议是验证我的值是否小于无穷大。如果不使用预定义的常量,我找不到合适的类型,所以我使用了ulong,因为这是我在 .NET 2.0 中最接近的 :)【讨论】:
有一些情况我真的很费心选择。
所有其他情况都是 int
编辑:关于 x86/x64
在 x86 架构中,int 是 32 位,但在 x64 中,int 是 64 位
如果你到处写“int”并从一种架构迁移到另一种架构,可能会导致问题。例如,您有一个 32 位的 api,它导出一个 long。你把它转换成一个整数,一切都很好。但是,当您迁移到 x64 时,地狱就崩溃了。
int 由您的架构定义,因此当您更改架构时,您需要注意它可能会导致潜在问题
【讨论】:
int 在 amd64 和 x86 上是 32 位。改变大小的是long。
int 是 System.Int32 的别名(请参阅 MSDN )如果您想要平台本机大小,那么我认为您需要使用 IntPtr。
这里的情况背景非常重要。您无需猜测它是否重要,我们在这里处理的是可量化的事情。我们知道我们通过使用 short 而不是 int 节省了 2 个字节。
您估计在给定时间点内存中的最大实例数是多少?如果有一百万,那么您将节省约 2Mb 的 Ram。那是大量的ram吗?同样,这取决于上下文,如果应用程序在具有 4Gb 内存的桌面上运行,您可能不太关心 2Mb。
如果内存中有数亿个实例,那么节省的空间会很大,但如果是这种情况,您可能没有足够的内存来处理它,您可能必须将此结构存储在磁盘上并一次处理其中的一部分。
【讨论】:
答案是:视情况而定。记忆是否重要的问题完全取决于你。如果您正在编写一个具有最小存储和内存要求的小型应用程序,那么不需要。如果您是谷歌,在数千台服务器上存储数十亿条记录,那么每个字节都可能花费一些真金白银。
【讨论】:
基于您存储的整数类型的内存消耗在桌面或网络应用程序中可能不是问题。在游戏或移动设备应用程序中,这可能是一个更大的问题。
但是,区分类型的真正原因是您需要存储的数字类型。如果您的数字非常大或精度很高,您可能需要使用long 来存储它。
【讨论】:
简单的答案是它并不重要。
更复杂的答案是视情况而定。
很明显,您需要选择一种能够保存数据结构而不会溢出的类型,即使您只存储较小的数字,那么选择int 可能是最明智的做法。
但是,如果您的应用程序加载大量数据或在内存有限的设备上运行,那么您可能需要为某些值选择 short。
【讨论】:
除非您以某种结构将大量这些内容打包在一起,否则它可能根本不会影响内存消耗。使用特定整数类型的最佳理由是与 API 的兼容性。除此之外,只需确保您选择的类型有足够的范围来涵盖您需要的值。除此之外,对于简单的局部变量,它并不重要。
【讨论】:
对于不尝试从文件镜像某种结构的 C# 应用程序,您最好使用整数或任何您的原生格式。唯一可能重要的是使用数百万个条目的数组。即使那样,我仍然会考虑整数。
【讨论】:
只有你才能判断内存消耗是否真的对你很重要。在大多数情况下,它不会产生任何明显的差异。
一般来说,我建议您使用int/Int32,这样您就可以摆脱它。如果您真的需要在特定情况下使用short、long、byte、uint 等,那么请这样做。
【讨论】:
这完全与您可以浪费的内存量有关。如果你不确定,那可能没关系。
【讨论】:
这一切都取决于您如何使用它们以及您拥有多少。即使您一次只有几个内存 - 这可能会驱动您的后备存储中的数据类型。
【讨论】: