c# - 有 8 位字符的字符串类型吗?

标签 c# string char

我需要在 RAM 中存储很多字符串。但它们不包含特殊的 unicode 字符,它们都只包含来自“ISO 8859-1”的字符,即一个字节。

现在我可以转换每个字符串,将其存储在内存中并将其转换回以与 .Contains() 和类似的方法一起使用,但这将是开销(在我看来)并且速度很慢。

是否有一个快速可靠的字符串类,并提供原始字符串类的一些方法,如 .Contains()?

我需要这个来在内存中存储更多的字符串,而使用更少的 RAM。还是有其他方法可以做到这一点?

更新:

感谢您的评论和回答。

我有一个存储字符串的类。然后通过一个方法调用,我需要确定我是否已经在内存中拥有该字符串。我有大约 1000 个字符串找出 如果它们在列表中 一秒 .总计数亿。
字符串的平均大小约为 20 个字符。真正关心我的是RAM。

我什至考虑过压缩数百万个字符串并将这些包存储在内存中。但是每次我需要访问这些值时,我都需要对其进行解压缩。

我也尝试使用 HashSet,但所需的内存量甚至更高。

我不需要真正的值(value)。只是想知道该值是否在列表中。因此,如果有一个哈希值可以做到这一点,那就更好了。但我发现的所有内容都需要比纯字符串更多的内存。

目前没有进一步国际化的计划。所以这是我会在需要处理的时候处理的事情:-)

我不知道使用数据库是否可以解决它。我不需要获取任何东西,只需知道该值是否存储在类中。我需要快速完成这项工作。

最佳答案

您不太可能因此获得任何显着的表现。但是,如果您需要节省内存,这种策略可能是合适的。

  • 转换 stringbyte[]为此,请使用 Encoding.Default.GetBytes() [1]。
  • 转换 byte[]返回 string对于显示或其他基于字符串的处理,请使用 Encoding.Default.GetString() .
  • 如果您使用在 string 上定义的扩展方法,您可以使您的代码看起来更好。和 byte[] .或者,您可以包装 byte[]在包装器类型中并将方法放在那里。将此包装器类型设为 struct ,而不是 class , 否则会产生额外的堆分配,这是您要避免的。

  • 不过,我想警告你——你正在放弃在你的应用程序中使用 Unicode 的能力。每次您认为需要这样做时,您通常应该让所有的警钟响起。最好以可以轻松返回使用 string 的方式构建代码。当内存大小增加并且内存消耗不再是问题时。

    [1] Encoding.Default返回正在运行的操作系统的当前 8 位代码页。英语 Windows 上的默认设置是 Windows-1252,这正是您想要的。对于俄语 Windows,它将是 Windows-1251(西里尔文)等。

    关于c# - 有 8 位字符的字符串类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916838/

    相关文章:

    c# - 有 .net 的 Css 编写器吗?

    algorithm - 获取字符串尾部数字的最快方法

    Java转换字符串,具有毫秒至今的对象

    C#:将int[]转换为字符串的最有效方法

    C# - 将对象的字段分配为对另一个对象字段的引用(如指针)

    c# - 是否可以在不同的文件扩展名中输出 typescript

    c++ - 无法将字符串转换为 const char

    c - 如何检查指向 char 数组的指针是否指向数字字符?

    c# - 有没有办法缩短这么长的 if/else if return 方法?

    java - 我在编译 Java 代码时遇到问题。我推测这是因为第二种方法 "method1"中存在转换/升级错误