它们是如何存储的
这俩string
和char[]
存储在堆上 - 所以存储是相同的。在内部我会假设string
只是一个封面char[]
with lots额外的代码以使其对您有用。
另外,如果你有很多重复的字符串,你可以使用实习 http://msdn.microsoft.com/en-us/library/system.string.intern.aspx以减少这些字符串的内存占用。
更好的选择
我更喜欢字符串——数据类型是什么以及您打算如何使用它会立即变得更加明显。人们也更习惯使用字符串,因此可维护性不会受到影响。您还将从为您完成的所有样板代码中受益匪浅。微软也投入了大量的精力来确保string
type 不是性能消耗者。
分配大小
我不知道分配了多少,我相信字符串非常有效,因为它们只分配足够的空间来存储 Unicode 字符 - 因为它们是不可变的,所以这样做是安全的。如果不分配新数组中的空间,也无法调整数组的大小,因此我再次假设它们只获取所需的内容。
.NET 数组的开销? https://stackoverflow.com/questions/1589669/overhead-of-a-net-array
备择方案
根据您的信息,只有 20 种语言代码并且性能是关键,您可以声明自己的枚举以减少表示代码所需的大小:
enum LanguageCode : byte
{
en = 0,
}
这仅需要 1 个字节,而不是两个字节需要 4+ 个字节char
(在数组中),但它确实限制了可用的范围LanguageCode
值的范围byte
- 足够容纳 20 件物品。
您可以使用以下命令查看值类型的大小sizeof()
操作员:sizeof(LanguageCode)
。枚举只不过是底层的类型,它们默认为int
,但正如您在我的代码示例中看到的,您可以通过“继承”新类型来更改它。