C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■96690 / 7階層)  バイト配列とShort配列のやり取りに関して
□投稿者/ とっちゃん (710回)-(2021/01/08(Fri) 22:15:48)
No96686 (Yammy さん) に返信

あえてこちらに…

> その結果、最初の二つはほぼ同じ速度なのに対し、
> 3つめは2倍弱程度高速な結果が得られました。
>
JIT分は除外していますか?
具体的には起動後最初の1回は、JITが動くのでその分を排除して
時間差を求めないと求める答えは出にくいかもしれません。


> Int16形式に関しても、
> ReaderWriter
> BitConverter.ToInt16とBitConverter.GetBytes
> buf(pos) = CByte((value / 256))
>
> の3種類の方法を比較してみました。
>
> その結果、最初の二つはほぼ同じ速度なのに対し、
> 3つめは2倍弱程度高速な結果が得られました。
>
BitConverter は、内部的にはバイト操作だけですが
エラーチェックとかいくつかあるので、そういう処理がない直接操作に比べたら遅くなります。

こればっかりはどうしようもない部分ですね。

> 見た目は古くさいし、読みづらいですが、
> 地道に変換するのがもっとも高速であることが分かりました。
>
速度面で見ると、CShort( value * 0.3 ) は、浮動小数点演算になるので速度面で無駄が大きいです。
単純に、0.3 倍(元の30パーセント)するだけで、端数切捨てでいいのであれば
整数演算にすることでかなり速度アップが期待できます。


それ以外の速度アップとしては並列化(Parallel.Forなど)もあります。

並列化は整数演算と違ってどうしてもオーバーヘッドがあるのでどこまで早くなるかはわかりません。

>
> ちなみに、
>
> #if BIGENDIAN
>
> #else
>
> #endif
>
> というのは何を表していますか?
> 私の環境だとBIGENDIAN=Trueの方がグレーアウトされてしまうのですが、
> https://qiita.com/longlongago_k/items/955cccfc70c3e36d76a2
> このページなど見ますとVSの場合にはリトルエンディアンしか使えないのではないでしょうか?
> どういう場合にビッグエンディアンが有効になりますか?
>
エンディアン(複数バイトで表現される数値データのメモリ上の並び)は、CPUに依存するため
コンパイル時のターゲットCPUによって決まります。
x86/x64(.NET Framework のサポートするCPUタイプ)では、常に Little Endian になるため
BIGENDIAN が有効になることはありません。

詳しくは、「エンディアン」「Endian」あるいは、「バイトオーダー」などでいろいろ調べてみてください。
速度を気にするような実装であれば、今はよくとも後々考慮が必要ということも出てくるかもしれないので。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[6]: バイト配列とShort配列のやり取りに関して /Hongliang →Re[8]: バイト配列とShort配列のやり取りに関して /Yammy
 
上記関連ツリー

バイト配列とShort配列のやり取りに関して / Yammy (21/01/07(Thu) 21:39) #96662
Re[1]: バイト配列とShort配列のやり取りに関して / Hongliang (21/01/07(Thu) 22:07) #96664
Re[1]: バイト配列とShort配列のやり取りに関して / 魔界の仮面弁士 (21/01/07(Thu) 22:03) #96663
  └ Re[2]: バイト配列とShort配列のやり取りに関して / Yammy (21/01/07(Thu) 23:12) #96665
    └ Re[3]: バイト配列とShort配列のやり取りに関して / とっちゃん (21/01/08(Fri) 01:12) #96666
      ├ Re[4]: バイト配列とShort配列のやり取りに関して / とっちゃん (21/01/08(Fri) 01:12) #96667
      └ Re[4]: バイト配列とShort配列のやり取りに関して / とっちゃん (21/01/08(Fri) 14:45) #96677
        └ Re[5]: バイト配列とShort配列のやり取りに関して / Yammy (21/01/08(Fri) 18:19) #96686
          └ Re[6]: バイト配列とShort配列のやり取りに関して / Hongliang (21/01/08(Fri) 18:39) #96687
            └ バイト配列とShort配列のやり取りに関して / とっちゃん (21/01/08(Fri) 22:15) #96690 ←Now
              └ Re[8]: バイト配列とShort配列のやり取りに関して / Yammy (21/01/17(Sun) 17:51) #96731
                └ Re[9]: バイト配列とShort配列のやり取りに関して / とっちゃん (21/01/17(Sun) 20:49) #96732

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信