- - PR -
変数はループ内で宣言するのでしょうか?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 値型の場合は? | ||||||||
|
投稿日時: 2008-12-07 11:22
ループ内で宣言(2)する場合は
ループする度に変数のアドレスを保持する 領域を再定義していると思われるので (この辺詳しい方から厳しいツッコミがきそうですが) 厳密には2の方がコストはかかるのだろうと思います。 しかし、組み込みなどでリソースが 非常に限られている場合ならともかく .NET(やJavaなど)を使うことが許されるほどに余裕がある環境で このコストが問題になることはまずないのではないでしょうか。 (コンパイラが最適化してくれていれば 実行コードレベルでは同じものになっている可能性もあります) 以上のことから、基本的には (私は)可読性を重視する方をオススメしたいです。 (一番信頼できて且つ手っ取り早い確認方法は 「実際に書いて試してみる」なのかもしれません(^^;) | ||||||||
|
投稿日時: 2008-12-07 12:08
掲示板に質問するより自身の目で IL を見比べた方が早いです。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-12-07 12:37
値型を使用する場合には、パフォーマンスに影響する程度の差が生じるかもしれません。
「コンパイラがどういうコードを生成しているか」にも左右されるので、これくらいの規模ならコードを書いて IL 比較した方が話が早いですね。 | ||||||||
|
投稿日時: 2008-12-07 14:25
自分で試してみたいと思うのですが
IL 比較とはどうすればよいのでしょうか? | ||||||||
|
投稿日時: 2008-12-07 19:49
「MSIL 逆アセンブラ」を使えば IL を見ることができますよ。
http://msdn.microsoft.com/ja-jp/library/f7dy01k1(VS.80).aspx _________________ Nakamura Blog | ||||||||
|
投稿日時: 2008-12-07 20:25
ildasm.exe http://msdn.microsoft.com/ja-jp/library/f7dy01k1(VS.80).aspx を使います。 |
1