我需要存储一个语言代码字符串,例如“en”,它总是包含 2 个字符。
将类型定义为“String”还是“Char”更好?
private string languageCode;
对
private char[] languageCode;
或者还有其他更好的选择吗?
这 2 个如何存储在内存中?分配值时将分配多少字节或位?
最佳答案
它们的存储方式
string
和 char[]
都存储在堆上 - 所以存储是相同的。在内部,我会假设 string
只是 char[]
的封面,带有 lots 的额外代码以使其对您有用。
如果你有很多重复的字符串,你可以使用Interning以减少这些字符串的内存占用。
更好的选择
我更喜欢字符串 - 数据类型是什么以及您打算如何使用它会更加明显。人们也更习惯于使用字符串,因此可维护性不会受到影响。您还将从为您完成的所有样板代码中受益匪浅。 Microsoft 也付出了很多努力来确保 string
类型不会影响性能。
分配大小
我不知道分配了多少,我相信字符串非常有效,因为它们只分配足够的空间来存储 Unicode 字符——因为它们是不可变的,所以这样做是安全的。如果不分配新数组中的空间,数组也无法调整大小,所以我再次假设它们只抓取所需的内容。
替代品
根据您的信息,只有 20 种语言代码并且性能是关键,您可以声明自己的枚举以减少表示代码所需的大小:
enum LanguageCode : byte
{
en = 0,
}
这将只占用 1 个字节,而不是 4+ 两个 char
(在一个数组中),但它确实将可用 LanguageCode
值的范围限制在该范围内byte
- 足以容纳 20 个项目。
您可以使用 sizeof()
运算符查看值类型的大小:sizeof(LanguageCode)
。枚举只是底层的类型,它们默认为 int
,但正如您在我的代码示例中看到的,您可以通过“继承”新类型来更改它。
关于c# - String 和 Char 类型如何存储在 .NET 的内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782690/