The*_*ght 11 c# memory clr garbage-collection memory-management
我需要存储一个语言代码字符串,例如"en",它总是包含2个字符.
将类型定义为"String"或"Char"更好吗?
private string languageCode;
Run Code Online (Sandbox Code Playgroud)
VS
private char[] languageCode;
Run Code Online (Sandbox Code Playgroud)
或者还有另一种更好的选择吗?
这些2如何存储在内存中?分配值时,将为它们分配多少字节或位?
它们是如何存储的
无论是string
和char[]
存储在堆-所以存储是一样的.在内部我会假设一个string
简单的封面,char[]
有很多额外的代码,使它对你有用.
此外,如果您有许多重复的字符串,您可以使用Interning来减少这些字符串的内存占用.
更好的选择
我倾向于使用字符串 - 数据类型是什么以及打算如何使用它会更加明显.人们也更习惯使用字符串,因此可维护性不会受到影响.您也将从为您完成的所有样板代码中受益匪浅.微软也付出了很多努力来确保这种string
类型不是一种性能损失.
分配大小
我不知道分配了多少,我相信字符串是非常有效的,因为它们只分配足够的存储Unicode字符 - 因为它们是不可变的,这样做是安全的.如果没有在新数组中分配空间,也无法调整数组的大小,所以我再次假设它们只抓取他们需要的内容.
备择方案
根据您的信息,只有20个语言代码和性能是关键,您可以声明自己的枚举,以减少代表代码所需的大小:
enum LanguageCode : byte
{
en = 0,
}
Run Code Online (Sandbox Code Playgroud)
这只需要1个字节而不是2个4+ char
(在一个数组中),但它确实将可用LanguageCode
值的范围限制在byte
- 对于20个项目而言足够大.
您可以使用sizeof()
运算符查看值类型的大小:sizeof(LanguageCode)
.枚举只是底层的基础类型,它们默认为int
,但正如您在我的代码示例中所看到的,您可以通过"继承"新类型来更改它.
归档时间: |
|
查看次数: |
10819 次 |
最近记录: |