【发布时间】:2012-08-22 02:15:05
【问题描述】:
我在 C# 中进行了大量的字符串操作,并且确实需要每个字符存储一个字节的字符串。这是因为我需要同时在内存中存储千兆字节的文本,这会导致内存不足的问题。我确定该文本永远不会包含非 ASCII 字符,因此出于我的目的,System.String 和 System.Char 将所有内容存储为每个字符两个字节的事实既是不必要的,也是一个真正的问题。
我即将开始编写我自己的 CharAscii 和 StringAscii 类 - 字符串 1 基本上将其数据保存为 byte[],并公开类似于 System.String 的字符串操作方法。然而,这似乎需要做很多工作来做一些看起来像一个非常标准的问题,所以我真的在这里发帖以检查是否还没有更简单的解决方案。例如,有什么方法可以让 System.String 在内部将数据存储为我没有注意到的 UTF8,或者以其他方式解决问题?
【问题讨论】:
-
.NET 是最好的方式吗?似乎 C/C++ 是处理内存中巨大字符串的更好选择。
-
Jon Skeet 去年对此进行了调查msmvps.com/blogs/jon_skeet/archive/2011/04/05/…
-
@Jon 的文章不错,但它确实只关注内存使用的详细分析,而不是替换
String本身。此外,FWIW,Jon 在文章上添加了“古怪想法”和“邪恶代码”标签。 -
如果您有 Reflector 或类似的东西,您可以从框架中提取
String类的副本,并将其内部结构更改为使用字节数组。 -
@RobertHarvey - 我也会这样做,不幸的是,它不包含最有趣的部分,例如著名的 InternalMarvin32HashString() 方法(我发誓这种方法存在:-) 更严重的是,很多stuff 不安全和/或内部 CLR 调用。
标签: c# .net string utf-8 ascii