• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:キューとコンボボックスの使い方  VB2008)

キューとコンボボックスの使い方 VB2008

このQ&Aのポイント
  • VB2008を使ってキューとコンボボックスの使い方について質問です。
  • 具体的なコードを提供しながら、キューとデータソースを使用した方法と、べたな方法の違いについて教えてください。
  • また、同じキューを使用する場合、コンボボックス1と2は独立して使用できるのかについても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

順序が前後しますが、 (2)について Queueコレクションのインスタンス生成時にキャパシティを指定しても、実際に配列で返されるのはコレクションに格納したオブジェクトの数だけです。 queue.ToArray.Length とすれば、10が返されます。 (3)について 今回は文字列型(値型)なので、それぞれの値は独立しています。これがクラス(参照型)になると若干話が変わってきます。 (1)について 上記を含め今回の場合、最終的に結果は同じになると思います。 「厳密に」となると、あらかじめリストを生成してからコンボボックスに放り込むか、コンボボックスでリストを形成するか、という違いがあります。分量が多くなってくると、処理の時間にも違いが出てくるでしょう。

su31fox
質問者

お礼

詳しい解説ありがとうございます。 処理の時間は(1)のリスト生成を先にした方が早いということでしょうか?

その他の回答 (1)

回答No.2

> 処理の時間は(1)のリスト生成を先にした方が早いということでしょうか? MicrosoftはAddよりもAddRangeのほうが速い、と言っていますがDataSourceプロパティで比較したものがなかったので実験してみました。 10,000件のデータをDataSourceとItems.Addでそれぞれ追加したときの処理時間を計測し、100回試行したデータです。 (1)がQueueコレクションに10,000件のデータをセットし、DataSourceプロパティで設定した結果 (2)がItems.Addを10,000回繰り返して設定した結果です。 (1) 平均 = 325.53ms / 最大 = 408ms / 最小 = 310ms (2) 平均 = 537.99ms / 最大 = 661ms / 最小 = 508ms DataSourceのほうが明らかに速いですね。 それと、このコードを書いて気づいたのですがDataSourceプロパティに配列を設定した場合、Itemsプロパティによる追加や削除ができません。また、SelectedIndexもItems.Addでは-1(未選択)のままですが、DataSourceでは0(先頭の項目)が選択されるようです。 配列を設定後にAdd, Remove等を行う必要があるのであれば、Items.AddRangeメソッドを使用してみてください。 ※計測に使ったコードを載せておきます。 Dim queue As Collections.Queue = New Collections.Queue(10000) Dim sw As New Diagnostics.Stopwatch ' (1) DataSource sw.Start() For i As Integer = 1 To 10000 queue.Enqueue(i.ToString()) Next i ComboBox1.DataSource = queue.ToArray sw.Stop() Call Console.Write(sw.ElapsedMilliseconds & ":") sw.Reset() ' (2) Items.Add sw.Start() For i As Integer = 1 To 10000 ComboBox2.Items.Add(i.ToString) Next sw.Stop() Call Console.WriteLine(sw.ElapsedMilliseconds)

関連するQ&A

専門家に質問してみよう