- PR -

変数はループ内で宣言するのでしょうか?

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2008-12-07 10:15
下記の1と2の違いは処理スピードやメモリに影響があるのでしょうか?
今までなんとなく1を使用していたのですが、そんなに影響がないのではと疑問に思っています。
ループが長くなる場合など、ループ内で変数宣言を行った方が可読性が良くなる場合に
1,2のどちらを使用するべきか悩んでしまいます。

ご教示お願いいたします。


クラスをループ内でNewしなければならない場合は?
1、
Dim obj1 As MyClass
For i As Integer = 0 to 1000
obj1 = New MyClass(i)
Next

2、
For i As Integer = 0 to 1000
Dim obj1 As MyClass = New MyClass(i)
Next


String型の場合は?
1、
Dim s As String
For i As Integer = 0 to 1000
s = i.ToString("#,##0")
Next

2、
For i As Integer = 0 to 1000
Dim s As String = i.ToString("#,##0")
Next

値型の場合は?

koyak
会議室デビュー日: 2008/12/06
投稿数: 2
投稿日時: 2008-12-07 11:22
ループ内で宣言(2)する場合は
ループする度に変数のアドレスを保持する
領域を再定義していると思われるので
(この辺詳しい方から厳しいツッコミがきそうですが)
厳密には2の方がコストはかかるのだろうと思います。

しかし、組み込みなどでリソースが
非常に限られている場合ならともかく
.NET(やJavaなど)を使うことが許されるほどに余裕がある環境で
このコストが問題になることはまずないのではないでしょうか。
(コンパイラが最適化してくれていれば
実行コードレベルでは同じものになっている可能性もあります)

以上のことから、基本的には
(私は)可読性を重視する方をオススメしたいです。

(一番信頼できて且つ手っ取り早い確認方法は
「実際に書いて試してみる」なのかもしれません(^^;)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-07 12:08
掲示板に質問するより自身の目で IL を見比べた方が早いです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-12-07 12:37
引用:

以上のことから、基本的には
(私は)可読性を重視する方をオススメしたいです。



値型を使用する場合には、パフォーマンスに影響する程度の差が生じるかもしれません。

引用:

(一番信頼できて且つ手っ取り早い確認方法は
「実際に書いて試してみる」なのかもしれません(^^;)



「コンパイラがどういうコードを生成しているか」にも左右されるので、これくらいの規模ならコードを書いて IL 比較した方が話が早いですね。

未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2008-12-07 14:25
自分で試してみたいと思うのですが
IL 比較とはどうすればよいのでしょうか?
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-07 19:49
「MSIL 逆アセンブラ」を使えば IL を見ることができますよ。

http://msdn.microsoft.com/ja-jp/library/f7dy01k1(VS.80).aspx

_________________
Nakamura Blog
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-12-07 20:25
引用:

IL 比較とはどうすればよいのでしょうか?



ildasm.exe
http://msdn.microsoft.com/ja-jp/library/f7dy01k1(VS.80).aspx

を使います。
1

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