【发布时间】:2014-12-10 12:11:40
【问题描述】:
如标题中所述,我正在评估在字节 [] 上实现 BitArray 的成本(我知道原生 BitArray 非常慢)使用位的字符串表示形式(例如:“001001001”),但我是接受任何更有效的建议。
数组的长度在设计时是未知的,但我想每个数组可能在 200 到 500 位之间。
内存不是问题,因此使用大量内存来表示数组不是问题,重要的是创建和操作数组时的速度(会被大量操作)。
提前感谢您对该主题的考虑和建议。
【问题讨论】:
-
BitArray不 比您直接使用byte[]的速度慢(因为它完全符合您的要求)。如果您担心性能,我什至不会认为使用字符串... -
您是否尝试过基准测试
BitArray是否太慢而无法满足您的需求?听起来您正试图过早地优化甚至还不存在的代码。 -
使用字符串的代码已经存在,我会使用其他类型的表示来加速它。如此处所述:dotnetperls.com/bitarray 当需要速度时,它们不是一个好的选择。所以我考虑过字节数组,但我不知道是否有更好的选择,或者位字符串是否比字节数组更好。
-
字符串?连尝试都没有意义。使用普通的旧
bool[]可能比BitArray更快,否则你不会有太多运气。 -
BitArray类型是“慢”的,因为这些位被打包成整数。这意味着每个按位操作都需要一些额外的操作来更新包含该位的 int。但是,这种表示在空间方面是最佳的,并且在许多情况下开销将是微不足道的。如果您不关心空间,请使用bool[]或byte[]。字符串非常糟糕,因为它们是不可变的,每次更改都需要创建一个内容稍作修改的新字符串。
标签: c# bit-manipulation bitarray