2016-06-27 20 views
2

イメージアイコンをinfragistics ultrawingridにロードしようとしています。これは、私は行を初期化しようとしていると私はそれぞれの画像をロードしている条件に基づいています。Image.FromFileが非常に遅い

しかし、私は、私はImage.FromFile()

を使用しようとしていますときに、非常に低速なパフォーマンスを持っているグリッドの読み込みを高速化

Private Sub ugMain_InitializeRow(sender As Object, e As InitializeRowEventArgs) Handles ugMain.InitializeRow 
    If e.Row.Cells("Delays").Value = 0 Then 
     e.Row.Cells("Indicator").Value = Image.FromFile("Images\\RoundedGreen.png") 
    Else 
     e.Row.Cells("Indicator").Value = Image.FromFile("Images\\RoundedRed.png") 

    End If 
End Sub 
+0

いくつの画像がありますか? – Plutonix

+2

各行で実行したいコードの場合は、各行のファイルアクセスの代わりに、それらのイメージを一度読み込んで 'List 'に入れ、必要なときにそのリストからそれらを使います。 –

+0

2つの異なる画像があります。緑色のアイコンと赤色のアイコン。各行がそれに基づいて条件を満たす必要があるため、一度にすべての画像を読み込むことができません。 – user1030181

答えて

3

Image.FromFileのために解決する方法を提案してくださいは遅くはありませんが、あなたはそれを呼び出している方法各レコードについて、となるため、パフォーマンス上のペナルティが発生します。あなたは、各行のファイルシステムとやり取りするそのメソッドを呼び出しています。

代わりに、あなたのグリッド内の行ごとにファイルシステムから、それらの画像をロードするので、これらのオプションのいずれかを使用することができます。

  • あなたは一度それらの画像をロードし、List<Image>に入れた後、毎回できますあなたはそれらを必要とし、インデックスでリストから画像を取得してください。例えば、Images[0]。これらの画像にキーでアクセスしたい場合は、PlutonixのようにDictionary<string , Image>を使用し、次にImages["RoundedGreen"]を使用して画像を取得できます。

  • ファイルシステムのイメージに頼る代わりに、アプリケーションのファイルResources.Resxを使用して、コンパイル時にイメージを保存できます。実行時にこれらのイメージを使用する必要があるたびに、My.Resources.RoundedGreenを使用してそれらのイメージを見つけることができます。フォームレベルでImagesメンバーを定義することができ、例えば

:フォームのLoad場合には、例えば、次にどこか

Dim Images As Dictionary(Of String, Image) = New Dictionary(Of String, Image)() 

、ロード画像:

Images.Add("RoundedGreen", Image.FromFile("Path to RoundedGreen image")) 
Images.Add("RoundedRed", Image.FromFile("Path to RoundedRed image")) 

次にどこでもそれらの画像を使用する必要があります、あなたはImagesメンバーからこの方法でそれらを得ることができます:Images("RoundedGreen")

+0

パフォーマンスは今より良くなりました。しかし、画像付きで14kレコードを読み込むのに2秒かかるのです。それまでグリッドが空白になっています – user1030181