2017-05-15 132 views
0

FlowLayoutPanelは、私が作成したユーザーコントロールを読み込んでいます。FlowLayoutPanel UserControlsの読み込みが遅い

これはユーザーコントロールです(ColorBoxと名付けましょう)。これはラベル付きの画像(Panelにロードされている)です。

enter image description here

私はFlowLayouPanelにこれらをロードし、これが最終的な結果である: enter image description here

私の問題は、カラーボックス(300〜400)の多くがあるときの負荷が非常に遅いということです。 現在、UIは機能しているので、別のスレッドでアイテムを読み込む関数を呼び出しています。

これは私がロードするために使用する機能です、私は私のアプリをプロファイリングし、それは多くの時間を要し一つだ:

private void LoadColorBox(List<ColorBox> cBoxList) 
    { 
     flowLayoutPanel1.SuspendLayout(); 
     foreach (var cBox in cBoxList) 
      flowLayoutPanel1.Controls.Add(cBox); 
     flowLayoutPanel1.ResumeLayout(); 
    } 

多くの時間を要する別の機能がColorBoxのコンストラクタです特に私が使用しているImageが存在するかどうかをチェックして、それを私のパネルに貼り付ける場所です。

 Image img; 
     using (var bmpTemp = new Bitmap(imgPath)) 
     { 
      img = new Bitmap(bmpTemp); 
     } 

     panelColor.BackgroundImage = img; 
     panelColor.BackgroundImageLayout = ImageLayout.Stretch; 

パフォーマンスを向上させるにはどうすればよいですか?

+0

いくつのコントロールがありますか?画像はどこから来ますか?いつそれらをロードしますか? – LarsTech

答えて

0

Add()をループする代わりにAddRange()を使用する必要があります。

private void LoadColorBox(List<ColorBox> cBoxList) 
    { 
     flowLayoutPanel1.Controls.AddRange(cBoxList) 
    } 

あなたがこれを処理しているとき、私は知らないが、あなたの代わりにロード(または他の)イベントのフォームのコンストラクタで原料のこの種を行う場合にも、いくつかの時間を取得する可能性があります。

+0

私はAddRange()で試してみましたが、パフォーマンスはまったく同じです。いくつかの掘り下げの後、私は問題がColorBoxオブジェクトの作成にあると考えています。私は私の質問を更新します。 – SilentRage47

+0

panelColor.BackgroundImageプロパティに直接ビットマップを作成しようとしましたか? Panel.Color.BackgroundImage =新しいビットマップ(imgPath)のようなもの? –

関連する問題