.net中在x64下管理大量零碎的小字符串,有什么节约内存的好办法?

时间:2021-03-08 14:44:38
不知道各位有没有遇到这样的问题?

.net中的字符串都是常量化的,字符串对象就是个引用。

我做了一个蛮大的字符串数组(二十几万吧)来存一些地名什么的,北京、上海、广州之类的,有时候还会对数组进行copy之类的操作,在32位下没啥,但在64位下内存涨了好几倍,dump后一看,字符串数组十几个,每个查到最后就是这些地名...

猜想64位下,一个字符串的内容,不过也就是4~6个字节,一个指针倒要8字节,指针比数据还大的情况下,保存这些零碎字符串实在是很不合算。

各位有啥好的方法来解决这个问题?

8 个解决方案

#1


把所有字符串按顺序存放到字节数组中,再用一个无符号整型数组记录每个字符串的开始位置,读取字符串的时候从字节数组中读取出这个字符串的字节数,转换为字符串,不知道这样内存会不会好一些。

#2


但是,如果使用字节数组,要用字符串的时候,还需要转换回来,如果使用频繁,这个上面消耗也很严重呀?

#3


使用字典树。

#4


有几个中文的字串数组,中文也能用字典树?

#5


 既然这么占内存
 在不用的时候就应该释放
 况且还有指针
 

#6


关注一下这个问题

#7


将字符串数组中的字符串每n(n根据情况自己定)个拼接成一个字符串,将重新拼接的字符串再保存到新的字符串数据。

#8


该回复于2013-04-01 09:41:03被管理员删除

#1


把所有字符串按顺序存放到字节数组中,再用一个无符号整型数组记录每个字符串的开始位置,读取字符串的时候从字节数组中读取出这个字符串的字节数,转换为字符串,不知道这样内存会不会好一些。

#2


但是,如果使用字节数组,要用字符串的时候,还需要转换回来,如果使用频繁,这个上面消耗也很严重呀?

#3


使用字典树。

#4


有几个中文的字串数组,中文也能用字典树?

#5


 既然这么占内存
 在不用的时候就应该释放
 况且还有指针
 

#6


关注一下这个问题

#7


将字符串数组中的字符串每n(n根据情况自己定)个拼接成一个字符串,将重新拼接的字符串再保存到新的字符串数据。

#8


该回复于2013-04-01 09:41:03被管理员删除