我可以提出几个想法.
编辑:我无法抗拒尝试为字节准备迭代器的方法.我在C#2.0中编写了一个代码生成器,它生成以下形式的代码:
IEnumerable<int> bits(byte[] bytes) {
for(int i=0; i<bytes.Length; ++i) {
int oi=8*i;
switch(bytes[i]) {
....
case 74: yield return oi+1; yield return oi+4; yield return oi+6; break;
....
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将其随机50%填充字节数组(10Mb)的位数与完全不使用迭代器的代码的性能进行了比较,并且包含两个循环:
for (int i = 0; i < bytes.Length; ++i) {
byte b = bytes[i];
for (int j = 7; j >= 0; --j) {
if (((int)b & (1 << j)) != 0) s++;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个代码片段比第一个代码片段快1.66倍(~1.5s vs~2.5s).我认为稀疏位数组甚至可能使第一个代码优于第二个代码.
| 归档时间: |
|
| 查看次数: |
1202 次 |
| 最近记录: |