組み込みデータ型とちょっとした疑問に関する実験
今回は組み込みデータ型に関して
組み込みデータ型は大きく分けて「数値」「文字列」「真理値」「object」の4種類。もう少し詳細にはMicrosoftの下記サイトを参照してもらうのが確実だけど、大まかに理解する分には問題ないと思う。
この中で32bitの整数と64bitの整数に関してですが、これらは32bitアプリ/64bitアプリとしてアプリケーションを開発した時にパフォーマンスにどの程度効果が出てくるのか前々から疑問に思っていました。ただ確かめないといけないような状況に陥ったこともなかったので試したことがないのですが。
まぁ、でも、いつまでも「もやもや」しているのも気分が悪いので、ついでにDecimalも加えて同じ計算をさせた場合のCPU使用率を測定することで試してみました。結果は以下の通り*1。
ソリューション構成:Release - CPU Any: 計75337ms
UInt64 < UInt32 (+2%) < Double (+23.3%) < Float (+5.3%) < Decimal (+11.6%)
ソリューション構成:Release - x64: 計39884ms
UInt64 < UInt32 (+0.17%) < Double (+2.8%) < Float (+0.0%) < Decimal (+82.8%)
ソリューション構成:Debug - CPU Any: 計116437ms
UInt64 < UInt32 (+1.4%)< Double (+12.0%) < Float (+4.5%) < Decimal (+26.8%)
ソリューション構成:Debug- x64: 計66377ms
Double < UInt64 (+0.0%) < Float (+0.1%) < UInt32 (+0.0%) < Decimal (+58.4%)
結論としては、整数は64bitOSで使う限りはUInt64の方が若干UInt32よりも性能が良い。しかし、大きな違いはないので、メモリの使用量を考えると整数はあまり気にせずUInt32を使っていて問題はないケースがほとんどと思われる。
それ以外に関しては、FloatとDoubleに関してはRelease-x64で扱う限り性能差は考慮に入れる必要はないが、CPU Anyでコンパイルすると劇的に*2遅くなるようなので取り扱い注意。しかし、Decimalは逆にRelease - x64でコンパイルして実行するとなぜかかなり*3遅くなる。原因は不明ながら*4、浮動小数点数値とDecimalは混在させずに使い分けるのがよさそうだ…