###### tags: `c#`
# Bit演算や条件式の排除、Parallel化をするとどれくらい早くなるのかの検証
*Mono+il2cppパターンで検証
## 検証するコード
1. ふつうのコード
```csharp
int sum = 0;
foreach (int number in ia1)//forも同様に検証
{
if (number % 2 != 0)
{
sum += number;
}
}
```
2. Bit
```csharp
int buffer = 0;
for (int i = 0; i < ia1.Length; i++)
{
var element = ia1[i];
if ((element & 1) == 1)
buffer += element;
}
int sum = buffer;
```
3. 条件分岐をなくす
```csharp
int buffer = 0;
for (int i = 0; i < ia1.Length; i++)
{
var element = ia1[i];
var odd = element & 1;
buffer += (odd * element);
}
int sum = buffer;
```
4. Parallel
```csharp
int bufferA = 0;
int bufferB = 0;
fixed (int* data = &ia1[0])
{
var p = (int*)data;
for (int i = 0; i < ia1.Length; i += 2)
{
bufferA += (p[0] & 1) * p[0];
bufferB += (p[1] & 1) * p[1];
p += 2;
}
}
int sum = bufferA + bufferB;
```
## 速度の検証結果

## まとめ
Parallel化したコードはParallel化していないコードと比べると2倍近く早い
条件分岐をなくすことは測度に非常に貢献してくれる
状況にもよると思うが今回のケースではbit演算の方が若干遅い(ぶれあり)