【发布时间】:2011-06-22 10:58:02
【问题描述】:
我需要在 RAM 中存储很多字符串。但它们不包含特殊的 unicode 字符,它们都只包含来自“ISO 8859-1”的字符,即一个字节。
现在我可以转换每个字符串,将其存储在内存中,然后将其转换回以与 .Contains() 和类似的方法一起使用,但这会产生开销(在我看来)并且速度很慢。
是否有一个快速可靠的字符串类,并提供原始字符串类的一些方法,如 .Contains()?
我需要这个来在内存中存储更多的字符串,而使用更少的 RAM。或者有其他方法吗?
更新:
感谢您的 cmets 和您的回答。
我有一个存储字符串的类。然后通过一个方法调用,我需要确定我是否已经在内存中拥有该字符串。如果它们在列表中秒,我有大约 1000 个字符串要弄清楚。总计数亿。 字符串的平均大小约为 20 个字符。真正关心我的是 RAM。
我什至想过压缩几百万个字符串并将这些包存储在内存中。但是每次我需要访问这些值时,我都需要对其进行解压缩。
我也尝试过使用HashSet,但所需的内存量更大。
我不需要真正的价值。只是想知道该值是否在列表中。因此,如果有一个哈希值可以做到这一点,那就更好了。但我发现的所有内容都需要比纯字符串更多的内存。
目前没有进一步国际化的计划。所以我会在需要处理的时候处理它:-)
我不知道使用数据库是否可以解决它。我不需要获取任何东西,只需知道该值是否存储在类中。我需要快速完成这项工作。
【问题讨论】:
-
您可以将它们存储为
byte[]吗?然后就可以使用Array的Contains方法了。 -
克里斯你确定使用普通的 unicode 字符串会影响性能,因为你必须加载太多的字符串?!我有点惊讶,如果您真的必须加载数百或数千 MB 的字符串,那么无论您使用 ASCII/ANSI 还是 Unicode,您的应用程序可能设计得并不正确。如果字符串太多,也许数据库方法会很好。
-
这散发着过早优化的味道。当您突然需要国际化您的应用程序时会发生什么?
-
如果您需要存储大约 1000 个平均长度为 20 个字符的字符串,您的 1 字节字符的净总量约为 20KB,2 字节的字符约为 40KB。 这不是问题。使用 String 类,继续前进。
-
对不起Lasse,我不是在说1000个字符串,我是在数亿个计算。