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

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

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

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


(過去ログ 52 を表示中)

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

■28302 / inTopicNo.1)  【速度】 IF文とSELECT文 VB.NET
  
□投稿者/ qw (1回)-(2008/11/24(Mon) 00:22:28)

分類:[.NET 全般] 

VB.NETにおいて

IF文とSELECT文はどちらが高速なんでしょうか?

ご存知のかたがいらっしゃればご教授ねがいます。

引用返信 編集キー/
■28303 / inTopicNo.2)  Re[1]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ やじゅ (793回)-(2008/11/24(Mon) 00:30:40)
やじゅ さんの Web サイト
2008/11/24(Mon) 00:53:11 編集(投稿者)

No28302 (qw さん) に返信
> VB.NETにおいて
> IF文とSELECT文はどちらが高速なんでしょうか?
>

単純な条件でならIFでしょうけど、
分岐が多い場合はSELECTの方が速いかも

組み方によるので、速度が気になるなら実際に
比べるといいのでは?

高速性より可読性を重視した方がいいかと

VBで速度比較 VB.NETでは無いけど・・・
http://tgws.fromc.jp/prog/vbspeed/
引用返信 編集キー/
■28305 / inTopicNo.3)  Re[2]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ やじゅ (794回)-(2008/11/24(Mon) 01:34:53)
やじゅ さんの Web サイト
ストップウォッチクラスで計測してみるといいかな

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim sw As New Stopwatch
        Dim a As Integer = 9
        Dim b As Integer = 0

        sw.Start()
        For i As Integer = 0 To 10000000
            If a = 9 Then
                b = 1
            End If

            'Select Case a
            '    Case 9 : b = 1
            'End Select
        Next
        sw.Stop()

        Dim sec As Double = sw.ElapsedTicks / Stopwatch.Frequency
        Console.WriteLine(sec)

    End Sub

引用返信 編集キー/
■28306 / inTopicNo.4)  Re[3]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ qw (2回)-(2008/11/24(Mon) 01:50:20)
やじゅさん、丁寧な回答ありがとうございます。

上記プログラムにて実験してみました。

SELECT文
0.0360270672621464
0.0364494248206794
0.0377857746500053
0.0374272146283515
0.0359375979308582

IF文
0.0270282101021037
0.0272616381708546
0.0271435046089532
0.0276700891715914
0.027100681192764

IF文のほうが速いですね。

いろいろ条件が変われば、また違う結果になるのかもしれませんが、
すっきりしました。
ありがとうございました。m(_ _)m

解決済み
引用返信 編集キー/
■28351 / inTopicNo.5)  Re[4]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ ふくちゃん (3回)-(2008/11/25(Tue) 09:57:16)
No28306 (qw さん) に返信
> やじゅさん、丁寧な回答ありがとうございます。
>
> 上記プログラムにて実験してみました。
>
> SELECT文
> 0.0360270672621464
> 0.0364494248206794
> 0.0377857746500053
> 0.0374272146283515
> 0.0359375979308582
>
> IF文
> 0.0270282101021037
> 0.0272616381708546
> 0.0271435046089532
> 0.0276700891715914
> 0.027100681192764
>
> IF文のほうが速いですね。
>
> いろいろ条件が変われば、また違う結果になるのかもしれませんが、
> すっきりしました。
> ありがとうございました。m(_ _)m
>


補足です。
IF分は else if がかける数に限界があります。(256?だったかな?)
そこだけ気をつけてくださいね。
解決済み
引用返信 編集キー/
■28393 / inTopicNo.6)  Re[5]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ じゃんぬねっと (566回)-(2008/11/25(Tue) 16:13:19)
じゃんぬねっと さんの Web サイト
No28351 (ふくちゃん さん) に返信
> 補足です。
> IF分は else if がかける数に限界があります。(256?だったかな?)
> そこだけ気をつけてくださいね。

いつの VB のお話でしょうか? .NET では特に制限として値は設けられていないかと思いますが。

仮に VB6 以前としても 256 ではないはずです。 1090 くらい中途半端な数字だったと思います。
そして If ステートメントに限らず Select Case ステートメントでも同様です。
解決済み
引用返信 編集キー/
■28401 / inTopicNo.7)  Re[6]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ Jitta (540回)-(2008/11/25(Tue) 21:30:23)
Jitta さんの Web サイト
No28393 (じゃんぬねっと さん) に返信
> ■No28351 (ふくちゃん さん) に返信
>>補足です。
>>IF分は else if がかける数に限界があります。(256?だったかな?)
>>そこだけ気をつけてくださいね。
>
> いつの VB のお話でしょうか? .NET では特に制限として値は設けられていないかと思いますが。
>
> 仮に VB6 以前としても 256 ではないはずです。 1090 くらい中途半端な数字だったと思います。
> そして If ステートメントに限らず Select Case ステートメントでも同様です。

補足
http://msdn.microsoft.com/ja-jp/library/752y8abs.aspx
こちらには、「複数行形式の If...Then...Else では、ElseIf 句はいくつ指定してもかまいません。」とあります。

引用返信 編集キー/
■28487 / inTopicNo.8)  Re[4]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ まんごーぷりん (47回)-(2008/11/27(Thu) 00:08:15)
まんごーぷりん さんの Web サイト
条件分岐を書く時、最速な処理を書くには、最もその条件が真になるであろう式を先頭にもってくることに尽きますよね。

if (i == 9) return;
if (i == 8) return;
if (i == 7) return;
if (i == 6) return;

if (i == 1) return;


i が 9 である可能性が高い場合は、上記の書き方が最速で、1 になる可能性が最も高い場合は最も遅い書き方になります。
SELECT だとどうなるでしょうね。

なんてことを思ったり。

#自分でやれという話もありますが、暫く開発環境が無い環境であるので・・・

引用返信 編集キー/
■28490 / inTopicNo.9)  Re[5]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ じゃんぬねっと (568回)-(2008/11/27(Thu) 00:25:40)
じゃんぬねっと さんの Web サイト
No28487 (まんごーぷりん さん) に返信
> SELECT だとどうなるでしょうね。

switch だと一定の数を超えると Dictionary に最適化します。
VB の Select Case もそれなりに最適化してくれるかもしれません。
昔 IL で比較した時は Select Case は少しイマイチだったような記憶もあります。
解決済み
引用返信 編集キー/
■28491 / inTopicNo.10)  Re[6]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ まんごーぷりん (50回)-(2008/11/27(Thu) 00:46:10)
まんごーぷりん さんの Web サイト
No28490 (じゃんぬねっと さん) に返信
> ■No28487 (まんごーぷりん さん) に返信
>>SELECT だとどうなるでしょうね。
>
> switch だと一定の数を超えると Dictionary に最適化します。

一定の量以下だとジャンプテーブルを使うのでしたよね。

> VB の Select Case もそれなりに最適化してくれるかもしれません。
> 昔 IL で比較した時は Select Case は少しイマイチだったような記憶もあります。

Select って常に全比較していたような記憶がありますが、僕も定かではないです。

#まー、C#er と J#er ですから、あまり使う機会がありませんし、この辺はご容赦願えると有難いです

で、本題です。(ここからは、じゃんぬねっとさんに対する返信ではないです)

最適化もそうですけど、単純な比較演算の速度と、Select や switch のように、ある値に対して、複数の条件をぶつけることを目的としたものを比較するのに、1 つの条件式だけの実測で結論を出して納得しまうのは、どうなんだろう?

一つの条件式だけの実測なんて、やる前から結果は分かり切っている訳で、どんな目的で使用するものに対して、今回のような疑問を持ったのかによって、結果は変わって来ると思うし、だからこその StopWatch クラスなんじゃないだろうか?

って思ったので、先の疑問を投げかけてみたのです。

#でも、Select だから、やっぱり遅いかもしれない。
引用返信 編集キー/
■28494 / inTopicNo.11)  Re[7]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ 松田美文 (1回)-(2008/11/27(Thu) 07:21:39)
こんにちは。私のサイトが参照されてたのですっ飛んできました。
わんくま同盟の人でなくても書き込んでいいん…ですよね?

■No28401 (Jitta さん)
> こちらには、「複数行形式の If...Then...Else では、ElseIf 句はいくつ指定してもかまいません。」とあります。
これが少し気になったのでやじゅさんのコードを改変して65536個の分岐にしてみました。

        'If
        sw.Start()
        For i As Integer = 0 To 1000
            If a = 65536 Then
                b = 0
            ElseIf a = 65535 Then
                b = 1
            (中略)
            ElseIf a = 1 Then
                b = 65535
            End If
        Next
        sw.Stop()

        'Select
        sw.Start()
        For i As Integer = 1 To 1
            Select Case a
            Case 65536
                b = 0
            Case 65535
                b = 1
            (中略)
            Case 1
                b = 65535
            End Select
        Next
        sw.Stop()

一応いずれもコンパイルは通りました。
最適化をなしにして実行してみたところ、いずれも朝の忙しい時間帯に終わる気配がなかったので
実行時間の計測はしていません。

引用返信 編集キー/
■28501 / inTopicNo.12)  Re[7]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (191回)-(2008/11/27(Thu) 10:24:16)
No28491 (まんごーぷりん さん) に返信

> 最適化もそうですけど、単純な比較演算の速度と、Select や switch のように、ある値に対して、複数の条件をぶつけることを目的としたものを比較するのに、1 つの条件式だけの実測で結論を出して納得しまうのは、どうなんだろう?

同じ条件だったら If と Select どっちが速いのだろう?
ってことが、もともとの質問なんじゃないでしょうか?

> 一つの条件式だけの実測なんて、やる前から結果は分かり切っている訳で

わかってる人はわかってるでしょうが、If と Select はどっちが速いのだろう?と
疑問を持つ初心者の人はいると思います。
引用返信 編集キー/
■28502 / inTopicNo.13)  Re[8]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ みきぬ (246回)-(2008/11/27(Thu) 10:27:40)
Q:
> 同じ条件だったら If と Select どっちが速いのだろう?

A:
条件(前提)によるのでそれを教えてください。もしくは、自分で計測してください。
引用返信 編集キー/
■28504 / inTopicNo.14)  Re[9]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (192回)-(2008/11/27(Thu) 10:32:17)
No28502 (みきぬ さん) に返信

> A:
> 条件(前提)によるのでそれを教えてください。もしくは、自分で計測してください。

私もそれが答えだと思います。
引用返信 編集キー/
■28551 / inTopicNo.15)  Re[10]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (208回)-(2008/11/27(Thu) 18:09:01)
質問者にて解決済みになっていて、最後の発言が自分なので
解決済みにしておきます。
解決済み
引用返信 編集キー/
■28574 / inTopicNo.16)  Re[11]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ 囚人 (308回)-(2008/11/28(Fri) 00:07:39)
.NET はどうか知らないですけど、C/C++ だとかは、良い条件が揃うと switch はかなり素敵なコンパイル結果になる事があり(最適化)、if をぶっちぎるかも。
引用返信 編集キー/
■28589 / inTopicNo.17)  Re[10]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ まんごーぷりん (53回)-(2008/11/28(Fri) 08:53:16)
まんごーぷりん さんの Web サイト
No28504 (.SHO さん) に返信
> ■No28502 (みきぬ さん) に返信
>
>>A:
>>条件(前提)によるのでそれを教えてください。もしくは、自分で計測してください。
>
> 私もそれが答えだと思います。

矛盾してますよ?
以下のやり取りがあった経緯で上記の結論に結び付く理屈が僕には理解できませんでした。
まぁ、本題ではないですし、別に良いですけどw

>■No28491 (まんごーぷりん さん) に返信
>
>> 最適化もそうですけど、単純な比較演算の速度と、Select や switch のように、ある値に対して、複数の条件をぶつけることを目的としたものを比較するのに、1 つの条件式だけの実測で結論を出して納得しまうのは、どうなんだろう?
>
>同じ条件だったら If と Select どっちが速いのだろう?
>ってことが、もともとの質問なんじゃないでしょうか?

解決済み
引用返信 編集キー/
■28591 / inTopicNo.18)  Re[11]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ .SHO (210回)-(2008/11/28(Fri) 09:03:34)
No28589 (まんごーぷりん さん) に返信

> 矛盾してますよ?
> 以下のやり取りがあった経緯で上記の結論に結び付く理屈が僕には理解できませんでした。

ですね。
どんどん突っ込まれそうなので面倒になっちゃっただけです。

ようは、C や C++ で switch が Dictionary に最適化されることは書かれてますが
VB は?なので、条件によって If より Select の方が速くなることがあるのかな?
っていうとこに個人的には興味があったんです。

解決済み
引用返信 編集キー/
■28595 / inTopicNo.19)  Re[12]: 【速度】 IF文とSELECT文 VB.NET
□投稿者/ ふくちゃん (7回)-(2008/11/28(Fri) 09:12:19)
限界数はなしですか。
むむむ 記憶記憶違いですかね。

そういえばIF文とSwitch文は2分探索木っぽくかけますよね?
switch文をお使いということであれば、数値型のはずですので、
数が多いのであれば検討してみてもいいかもしれませんね。






No28591 (.SHO さん) に返信
> ■No28589 (まんごーぷりん さん) に返信
>
>>矛盾してますよ?
>>以下のやり取りがあった経緯で上記の結論に結び付く理屈が僕には理解できませんでした。
>
> ですね。
> どんどん突っ込まれそうなので面倒になっちゃっただけです。
>
> ようは、C や C++ で switch が Dictionary に最適化されることは書かれてますが
> VB は?なので、条件によって If より Select の方が速くなることがあるのかな?
> っていうとこに個人的には興味があったんです。
>
引用返信 編集キー/
■28596 / inTopicNo.20)  Re[12]: 【速度】 IF文とSELECT文 VB.NET
 
□投稿者/ まんごーぷりん (54回)-(2008/11/28(Fri) 09:13:22)
まんごーぷりん さんの Web サイト
2008/11/28(Fri) 09:14:16 編集(投稿者)

No28591 (.SHO さん) に返信
> ■No28589 (まんごーぷりん さん) に返信
>
> VB は?なので、条件によって If より Select の方が速くなることがあるのかな?

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

今回の実測テストでは、たった 1 条件だけで比較したため、上記のメリットが全く見えていません。
そもそも、一つの条件で Select って使いませんから、それだけで結論づけるのも間違っていますし、このスレを見た人が間違った解釈をすることも危険だと思っています。

解決済み
引用返信 編集キー/

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

管理者用

- Child Tree -