- PR -

VB.NETの数値型変数は何を使ったら良い(速い)ですか?

1
投稿者投稿内容
ラーミア
会議室デビュー日: 2004/02/23
投稿数: 14
投稿日時: 2004-03-31 19:10
よろしくお願いします。

VB.NETの開発をしております。
VB.NETではVB6.0よりも型が多いです。

特に数値型(int32,Integer,Long,Decimalなどなど)はどれを使用してよいか迷ってしまいます。

・変数にセットされる範囲を重点に置けば良いのか?
・IntegerやLong(見慣れているため)に統一するのが良いのか?
・型によって処理速度に差が出るのか?
 ※VB6.0ではLong型を多用していました。(Integerより速いという耳を信じて...)

ご意見聞かせてください。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-31 19:21
引用:

ラーミアさんの書き込み (2004-03-31 19:10) より:
特に数値型(int32,Integer,Long,Decimalなどなど)はどれを使用してよいか迷ってしまいます。

・変数にセットされる範囲を重点に置けば良いのか?
・IntegerやLong(見慣れているため)に統一するのが良いのか?
・型によって処理速度に差が出るのか?
 ※VB6.0ではLong型を多用していました。(Integerより速いという耳を信じて...)


特別に(ものすごく)パフォーマンスを気にしなければならないのでもない限り、処理速度という観点で判断しない方がいいと思います。
※はっきり言って変わりません(いや、変わりはするのでしょうが…)

特に理由が無ければ全部Integer(Int32)、配列などを使用するためにメモリを多く使う場合は、必要に応じたサイズの型、どうしても範囲が必要ならLong(Int64)て感じかな…
効率という意味では、「一応」Int32辺りかなとは思います。

Longは、サイズ的に必要な場合以外は使わないです(当たり前といえば当たり前)。特にLongは、プリミティブな型なのにスレッド絡みでいらん事を気にしなければならない場合がありますので。

ちなみに個人的な意見を書くと、例えばVB6などで処理効率上Longを使うって話はありますが、それが現実上意味があるとは思えません。よっぽど無駄が無いようにチューニングされた処理でもあれば別かもしれませんが、はっきり言って他の処理部分で、そんな些細な違いは吸収されていると思います(大抵のプログラムは)。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-31 19:42
その型同士の四則演算や値を代入する操作だけを数万回も数億回も行うプログラムなら影響が目に見えるかもしれませんが、通常のプログラムではほとんど変わらないのではないでしょうか。
もし演算や代入にかかる時間が処理時間の大半を占めているなら、そのアルゴリズムを工夫して演算や代入の回数を減らすことを考えたほうが効果的だと思います。

ちなみにInt32とIntegerは同じ型です。
あと、小数を扱わないのなら整数型(IntegerとかLongとか)を使った方がパフォーマンスは良いかもしれませんね。

引用:

なちゃさんの書き込み (2004-03-31 19:21) より:
特にLongは、プリミティブな型なのにスレッド絡みでいらん事を気にしなければならない場合がありますので。



32 ビットの Intel 製 CPU を搭載したコンピュータで 64 ビット値を代入することは分割不可能な操作ではありません。つまり、この操作はスレッド セーフではありません。
MSDNヘルプにこんなことが書いてありました。これのことですか?
15へぇ
ラーミア
会議室デビュー日: 2004/02/23
投稿数: 14
投稿日時: 2004-03-31 19:48
なちゃさん一郎さん参考になります。

プロジェクト開発の基準みたいなものを作っておりまして...

たとえば、ソースに「Option Strict On 」を入れることにしまして、
定数にも型宣言が必要になりました。

1とか2とかの定数はByte型を使ってもあまり意味がないということでしょうか?

よろしくお願いします。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-03-31 20:49
業務系アプリと想定します。

引用:

ラーミアさんの書き込み (2004-03-31 19:48) より:
1とか2とかの定数はByte型を使ってもあまり意味がないということでしょうか?



1や2だからByte型である、と考えるのは正しくないと思います。
定数の場合、それを使う場所があるわけで、
その使われ方の意味からとり得る値の範囲を考えて相応しい型を選びます。

ちなみにByte型はバイナリ−データを意識して使うときぐらいしか使いません。
例えば、2 - 4 + 3はオーバーフロー(正確にはアンダーフローだけど)しますし、
四則演算する場合は注意が必要になってきます。

私なら、通常はInteger型、バイナリデータとして使う場合はByte型、
小数は安直にDecimalにします。(大きな数字を扱う場合もDecimalを使います。)

業務系アプリであれば、データベースとのやり取りなどの比重が高いですから、
全体の処理内容から言えば、あきらかに変な使い方(ループで整数以外のカウンタを使うとか)さえしなければ、
変数の型の違いによる速度は微々たるものです。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-03-31 20:55 ]
1

スキルアップ/キャリアアップ(JOB@IT)