【问题标题】:C# Quick bit arrayC# 快速位数组
【发布时间】: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


【解决方案1】:

一些建议:

1) 计算机不会处理位,即使 n int 或 long 也会以相同的速度工作

2) 为了达到速度,您可以考虑使用不安全的代码编写它

3) 新的很贵。如果创建了很多对象,您可以执行以下操作: 创建一个 10K 的块 一次对象,并在需要时从方法中提供它们。缓存用完后,您可以重新创建它们。有另一种方法,一旦对象处理完成,您就可以清理它并将其返回到缓存

4) 确保您的操作是最佳的

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2013-01-21
    • 2016-01-26
    • 2013-01-31
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多