ImageListにImageを追加するのが遅い(ListView+ImageList)
- 題名: ImageListにImageを追加するのが遅い(ListView+ImageList)
- 著者: バベル
- 日時: 2008/03/04 0:55:54
- ID: 21547
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ImageListにImageを追加するのが遅い(ListView+ImageList)
- 著者: 引っ込んだ略
- 日時: 2008/03/09 14:00:08
- ID: 21615
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: ImageListにImageを追加するのが遅い(ListView+ImageList)
- 著者: 引っ込んだ略
- 日時: 2008/03/10 22:47:35
- ID: 21635
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: ImageListにImageを追加するのが遅い(ListView+ImageList)
- 著者: バベル
- 日時: 2008/03/22 19:10:21
- ID: 21699
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になっております。
ListViewのLargeIconで画像をサムネイル表示できるツールを作っているのですが、
ListViewに表示する画像をImageListに登録する速度が遅すぎて困っています。
’ListViewのほうには事前にアイテムを追加してある
’このループで画像をロードし、各アイテムのアイコンとして表示していく
For i As Integer = 0 To MaxIndex
Dim imagefile As String = filesArray(i) '画像ファイルを指定
If ImageList1.Images.ContainsKey(id) = False Then'未追加のキーか判断
Dim thumbnail As Image = createThumbnail(imagefile)’縮小画像作成
ImageList1.Images.Add("キー", thumbnail)’イメージリストに追加
thumbnail.Dispose()
End If
ListView1.Items(i).ImageKey = "キー" ’キーを指定してListViewに表示
Next
という感じで追加しているのですが、
画像が500枚あると2分、1000枚で4分かかってしまいます。
(AthlonXP X2 3800+メモリ2Gの環境です)
縮小画像を作る過程や、最終的にListViewに表示する処理など、
どこが遅いのか1つ1つ省いて検証しましたが、どの処理を省いても速度が一緒で、
「ImageList.Images.Add()」がボトルネックになっていました。
画像を一旦配列に入れてから改めてAddRangeで登録すると、
ループで1つ1つ登録するよりも速くなり、4分→30秒に短縮できました。
しかしAddRangeでは項目一つ一つにキーを適切に登録することができないこと、
また30秒程度かかりますがその間無反応でプログレスバーも出せないことで、
それはそれで問題が多くなりました。
エクスプローラの縮小画像表示ほど速くなくてもかまいませんが、
もう少し使い勝手の良い速度で画像を表示できないものでしょうか。
ImageListを使わずに、CollectionのアイテムをListViewに表示する方法などがあれば、一番助かりますが。
何卒アドバイスお願いいたします。
ちなみにListViewを使わずに画像を一つ一つ描画すればよいのでしょうけれど、
作っているプログラムの性質上どうしてもListViewを使いたいと考えています。