我需要在RAM中存储很多字符串.但是它们不包含特殊的unicode字符,它们都只包含来自"ISO 8859-1"的字符,即一个字节.
现在我可以转换每个字符串,将其存储在内存中并将其转换回来使用.Contains()和类似的方法,但这将是开销(在我看来)和慢.
是否有一个快速可靠的字符串类,并提供原始字符串类的一些方法,如.Contains()?
我需要这个在内存中存储更多字符串,使用更少的RAM.或者还有其他方法吗?
更新:
感谢您的意见和答案.
我有一个存储字符串的类.然后通过一个方法调用我需要弄清楚我是否已经在内存中有该字符串.我有大约1000串找出他们是否在名单第二.总计数亿.字符串的平均大小约为20个字符.它真的是RAM关心我.
我甚至考虑压缩数百万字符串并将这些包存储在内存中.但是每当我需要访问这些值时,我需要解压缩它.
我也尝试使用HashSet,但所需的内存量甚至更高.
我不需要真正的价值.只是要知道值是否在列表中.因此,如果有一个可以做到的哈希值,那就更好了.但我发现所有内存都需要比纯字符串更多的内存.
目前还没有进一步国际化的计划.所以当我需要时,我会处理这件事:-)
我不知道使用数据库是否可以解决它.我不需要取任何东西,只是为了知道值是否存储在类中.我需要快速做到这一点.
您不太可能从中获得任何重要的表现.但是,如果您需要节省内存,则此策略可能是合适的.
要将a转换string为a byte[],请使用Encoding.Default.GetBytes()[1].
要将byte[]返回转换string为显示或其他基于字符串的处理,请使用Encoding.Default.GetString().
如果使用在string和上定义的扩展方法,则可以使代码看起来更好byte[].或者,您可以将其byte[]包装在包装器类型中并将方法放在那里.使这个包装器类型为a struct而不是a class,否则会产生额外的堆分配,这是你要避免的.
但是我想警告你 - 你正在丢弃在你的应用程序中使用Unicode的能力.每当您认为需要这样做时,通常应该让所有警钟都响起.最好是以这样的方式构建代码,以便string在内存大小增加并且内存消耗不再成为问题时可以轻松返回使用.
[1] Encoding.Default返回正在运行的操作系统的当前8位代码页.英语Windows上的默认设置是Windows-1252,这是您想要的.对于俄罗斯Windows,它将是Windows-1251(西里尔语)等.
| 归档时间: |
|
| 查看次数: |
8019 次 |
| 最近记录: |