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

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

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

Re[15]: 【速度】 IF文とSELECT文 VB.NET [1]


(過去ログ 52 を表示中)

[トピック内 33 記事 (21 - 33 表示)]  << 0 | 1 >>

■28598 / inTopicNo.21)  Re[13]: 【速度】 IF文とSELECT文 VB.NET
  
□投稿者/ じゃんぬねっと (570回)-(2008/11/28(Fri) 09:16:13)
じゃんぬねっと さんの Web サイト
No28595 (ふくちゃん さん) に返信
> そういえばIF文とSwitch文は2分探索木っぽくかけますよね?
> switch文をお使いということであれば、数値型のはずですので、
> 数が多いのであれば検討してみてもいいかもしれませんね。

Java と間違えていませんか。
C# では System.String も switch の対象にできます。

1 行目の内容とどう繋がるかわかりませんが。
引用返信 編集キー/
■28599 / inTopicNo.22)  Re[13]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (213回)-(2008/11/28(Fri) 09:16:26)
No28595 (ふくちゃん さん) に返信

> 限界数はなしですか。
> むむむ 記憶違いですかね。

えっとぉ〜??
ごめんなさい。どういうことですか?
引用返信 編集キー/
■28600 / inTopicNo.23)  Re[13]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (214回)-(2008/11/28(Fri) 09:18:57)
No28596 (まんごーぷりん さん) に返信

> あります・・・というか Select や switch を使うケースの場合の多くは、それを使った方が速くなる「可能性が高い(ここ大事w)」です。

そのケースが知りたいです。
引用返信 編集キー/
■28603 / inTopicNo.24)  Re[14]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ まんごーぷりん (55回)-(2008/11/28(Fri) 09:26:39)
まんごーぷりん さんの Web サイト
No28600 (.SHO さん) に返信
> ■No28596 (まんごーぷりん さん) に返信
>
>>あります・・・というか Select や switch を使うケースの場合の多くは、それを使った方が速くなる「可能性が高い(ここ大事w)」です。
>
> そのケースが知りたいです。

Select や switch を使うケースって、ある変数が 3 値以上になる可能性がある場合の条件判断ですよね?
解決済み
引用返信 編集キー/
■28604 / inTopicNo.25)  Re[15]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (215回)-(2008/11/28(Fri) 09:28:13)
No28603 (まんごーぷりん さん) に返信

> Select や switch を使うケースって、ある変数が 3 値以上になる可能性がある場合の条件判断ですよね?

ようするに、If より Select の方が速いってことですか?
引用返信 編集キー/
■28608 / inTopicNo.26)  Re[14]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ みきぬ (249回)-(2008/11/28(Fri) 10:12:49)
個人的には、If でも Select でも書けるという状況はわかるけど、If か Select かで迷う状況ってのが想像つかなかったりする。

速度? そんなもの最適化に任せればいいんだよ(ぉ
引用返信 編集キー/
■28609 / inTopicNo.27)  Re[13]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ よねKEN (208回)-(2008/11/28(Fri) 10:18:13)
2008/11/28(Fri) 10:19:42 編集(投稿者)

>>VB は?なので、条件によって If より Select の方が速くなることがあるのかな?
>
> あります・・・というか Select や switch を使うケースの場合の多くは、それを使った方が速くなる「可能性が高い(ここ大事w)」です。

この場合は話の前提として、VBのSelect文もC#のswitchで書ける程度の機能しか使わないということと
単純な整数値の値比較を行う場合、という条件が必要ですね。
その上で「可能性が高い」と。

> 今回の実測テストでは、たった 1 条件だけで比較したため、上記のメリットが全く見えていません。

その通りですね。
1条件だとIf文もSelect文もほぼ同じILコードにコンパイルされます。
1点異なるのは、Select文は注目する変数を一旦内部的に生成したローカル変数に格納して、
各Case節と比較する際に、読み出して比較するという点です。
No28305 のコード例では、この内部的なローカル変数への格納と読み出しの分だけ、Select文の方が
遅いという結果になっていますね。

1条件だけの実験は、If文の方が速くなる条件なので、If文とSelect文のどちらかが速いのかを
これだけで結論付けてはいけませんね。

引用返信 編集キー/
■28610 / inTopicNo.28)  Re[15]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (217回)-(2008/11/28(Fri) 10:19:10)
No28608 (みきぬ さん) に返信

> If か Select かで迷う状況ってのが想像つかなかったりする。

組み込みシステムで、処理がどーしても間に合わない時に
検討対象になったことは実際にありました。
ただし、C言語ですが。
VBで組み込み作るか?と言われれば個人的にはNoですけど。
引用返信 編集キー/
■28612 / inTopicNo.29)  Re[14]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (218回)-(2008/11/28(Fri) 10:28:46)
No28609 (よねKEN さん) に返信

> この場合は話の前提として、VBのSelect文もC#のswitchで書ける程度の機能しか使わないということと

ごめんなさい。ここが良くわかりませんでした。
前提条件にVBとC#の比較が必要なのはなぜですか?
引用返信 編集キー/
■28615 / inTopicNo.30)  Re[15]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ みきぬ (251回)-(2008/11/28(Fri) 10:40:36)
No28612 (.SHO さん) に返信
> ■No28609 (よねKEN さん) に返信
>
>>この場合は話の前提として、VBのSelect文もC#のswitchで書ける程度の機能しか使わないということと
>
> ごめんなさい。ここが良くわかりませんでした。
> 前提条件にVBとC#の比較が必要なのはなぜですか?

VB.NET の Select ... Case はすっげー高機能なんです。
http://msdn.microsoft.com/ja-jp/library/cy37t14y(VS.80).aspx

引用返信 編集キー/
■28617 / inTopicNo.31)  Re[16]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (219回)-(2008/11/28(Fri) 10:45:44)
No28615 (みきぬ さん) に返信

> VB.NET の Select ... Case はすっげー高機能なんです。
> http://msdn.microsoft.com/ja-jp/library/cy37t14y(VS.80).aspx

なるほど!!!
やっと皆さんの言っている事がわかりました。
ありがとうございます。勉強になりました。
お手数をお掛けしました。
解決済み
引用返信 編集キー/
■28619 / inTopicNo.32)  Re[15]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ よねKEN (209回)-(2008/11/28(Fri) 10:54:27)
2008/11/28(Fri) 10:54:53 編集(投稿者)

No28612 (.SHO さん) に返信
> ■No28609 (よねKEN さん) に返信
>
>>この場合は話の前提として、VBのSelect文もC#のswitchで書ける程度の機能しか使わないということと
>
> ごめんなさい。ここが良くわかりませんでした。
> 前提条件にVBとC#の比較が必要なのはなぜですか?

No28615 でみきぬさんにフォローしていただいている通りで、
VBのSelect Case文というのは、C#のswitch文よりもいろいろな記述方法が使えます。
VBのSelect Case文/C#のswitch文が速くなると予想されるのは、
ILコードにコンパイルされたときにILのswitch命令に変換される場合です。
(switch命令に変換できない場合は、基本的にIf文をコンパイルしたときと
同じようなILコードを吐くことになります)

手前味噌ですが、switch命令については以下を参照してください。
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/IL/il12_Switch.html
解決済み
引用返信 編集キー/
■28620 / inTopicNo.33)  Re[16]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ 魔界の仮面弁士 (908回)-(2008/11/28(Fri) 11:00:04)
2008/11/28(Fri) 11:03:20 編集(投稿者)

# 解決済みチェックを外してしまっていたので、再編集。

No28615 (みきぬ さん) に返信
> VB.NET の Select ... Case はすっげー高機能なんです。
> http://msdn.microsoft.com/ja-jp/library/cy37t14y%28VS.80%29.aspx

(引用文の URL を、あえて変更しています)


C# の言語仕様によると、switch ステートメントの管理型になる事ができるのは、
sbyte、byte、short、ushort、int、uint、long、ulong、char、string、enum型とありますね。
たとえば、DateTime は比較できません。VB では可能ですけれども。

 Select Case Now
  Case #4/1/2009# To #5/20/2011#, #3/2/2005 6:20:17 PM#
  Case Is <= #1/2/2008#
  Case Else
 End Select

で。 No28615 にある URL を見ると、『基本データ型のいずれかである必要があります。』と
ありますが、実際には比較演算子が実装されているならば、他の型を指定することもできます。


Shared Operator =(ByVal a As Form1, ByVal b As Integer) As Boolean
 Return a IsNot Nothing AndAlso a.Name.Length = b
End Operator

Shared Operator <>(ByVal a As Form1, ByVal b As Integer) As Boolean
 Return a Is Nothing OrElse a.Name.Length <> b
End Operator

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
 Select Case Me
  Case 1
   MsgBox("a")
  Case 5
   MsgBox("b")
  Case Else
   MsgBox("c")
 End Select
End Sub
解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -