2012-04-27 14 views
0

を使用して文字列配列内の各操作のために、私はそれの各ループについてを使用するときに文字列配列の行動を知りたいです。上記のコードに示すように文字列配列の行動:VB.NET

Dim StringArray(499) As String 
'fill in each element with random string 

Dim count As Int32 
Dim current As String 

For Each current in StringArray 
    'do something with current 
    count = count + 1 
    If count = 10 
     Exit For 
    End If 
Next 

're-enter the StringArray again 
count = 0 
For Each current in StringArray 
    'do something with current 
    count = count + 1 
    If count = 10 
     Exit For 
    End If 
Next 

、私は各ループについてを使用して二回のStringArrayにアクセスする必要がある場合、それはのStringArrayでALL要素も私だけかかわらず、二回ロードされることは事実である:以下のコードを考えてみましょうそれぞれの要素を10個使用するループごとに?パフォーマンスの観点からは、メソッド内で20回など、複数回アクセスする必要がある文字列のリストを格納するために、String配列をデータ構造として使用することをお勧めしますか?

+0

簡単な質問:「**は2回読み込まれます**」読み込まれたとはどういう意味ですか?どこからロード? –

答えて

5

「ロード済み」とはどういう意味ですか?あなたは配列を反復するだけです。それは何もロードしていません - それを反復するだけです。それがあなたが心配していたものなら、コピーを作成しません。

C#で少なくとも、foreachは、コンパイル時に配列であることがわかっているループは、基本的にインデックスを保持し(そしてインクリメントして)、直接配列アクセスを使用します。 IEnumerator(Of T)も作成されません。私はVBが同じように動作することを期待します。 LINQはしかし、あなたのサンプルコード簡単にすることができ

注:

' No need to declare any variables outside the loop 
For Each current As String in StringArray.Take(10) 
    ' Do something with current 
Next 

パフォーマンスの観点からは、お勧めがあることを必要とする文字列のリストを格納するためのデータ構造としてString配列を使用することですメソッド内で複数回、たとえば20回アクセスされましたか?何とは対照的に、

?これらの時間のそれぞれをデータベースに再クエリするよりも、そうするのが良いでしょう。しかしList(Of String)を文字列配列に変換する価値はありません。

+2

@Downvoter:コメントしますか? –

+0

明らかにh8r! –