- - PR -
ArrayListで大量のデータを追加する際の速度
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-20 09:17
初めて書き込みさせていただきます。
現在VB.Net2003にてArrayListに大量のデータ(1万件程度)を 登録する処理を行っています。 今はAddItemにて1件づつ登録しているのですが、 結構時間がかかってしまいます。 ComboBoxのようにAPIを使って速度を上げることなどは 不可能なのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2006-06-20 09:39
はじめまして、深山です。 的外れな回答かもしれませんが、Capacityプロパティを設定してみてはどうでしょう? | ||||
|
投稿日時: 2006-06-20 10:04
追加するアイテムにもよるのですが... Add メソッドよりは AddRange メソッドでしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-06-20 11:28
早速の返答ありがとうございます。
思ったよりもレスポンスが早いので感動しています。 Capacityプロパティを使用するとリストの再割り当てが 必要なくなるため高速化できるということですね。 しかし、あらかじめ件数がわかっていれば良いのですが、 件数が確定されているわけではないのでツライですね。 AddRangeメソッドも調べてみましたが、 1件づつデータをチェックしながら必要なものだけを 登録しているため、まとめて登録も使えないかと思います。 1件づつAddするよりも動的配列に一度格納してから、 AddRangeを使用したほうが早いんでしょうかね? | ||||
|
投稿日時: 2006-06-20 11:49
10件づつくらい、まとめて追加するようにすると少し早くなるかな? やはり、ある程度追加数の予測がたつなら、最初に ArrayList のコンストラクタでヒントを与えておくのがイチバンかと。 専用のコレクション作った方がいい場合もあるかも。 [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-06-20 11:54 ] | ||||
|
投稿日時: 2006-06-20 12:20
「1万件程度」というのが分かっているなら、1万500ぐらいとかでも良いでしょう。 確か ArrayList はキャパが足りなくなった時点で、キャパを倍にしていくんじゃなかったかな。 16->32->64… _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-06-20 16:29
自己レスです。
どうやらArrayListの問題ではなく、追加時にデータを加工している箇所が 遅い要因であることが判明しました。 問題になっていたのが、ArrayListを含めているコンポーネントで次のような流れです。 @AddItemメソッド → Aデータ加工 → BArrayListに登録 どうもAのデータ加工のところで重労働を行っているようです。 実際Aをコメントアウトしてみたところ、900ミリ秒から15ミリ秒に変わりました。 中で何をしているのかはまだ見ていませんが、間違いなさそうです・・・。 今回初めてIT会議室を利用させていただきましたが、 なかなか的確なアドバイスが貰えて勉強になりました。 今後とも利用させていただきますので、その際は皆さんよろしくお願いします。 |
1