2017-05-15 1 views
0

FlowLayoutPanel은 내가 만든 사용자 콘트롤을로드합니다.FlowLayoutPanel UserControls의 느린 로딩

이것은 사용자 정의 컨트롤입니다 (이름은 ColorBox).이 라벨은 레이블이있는 이미지 (Panel에로드 됨)입니다.

enter image description here

은 내가 FlowLayouPanel에 다음을로드하고이 최종 결과입니다 enter image description here

내 문제는 ColorBox (300 ~ 400)이 많이있을 때 로딩이 매우 느린 것입니다. 현재로서는 UI가 여전히 작동하도록 별도의 스레드에서 항목을로드하는 함수를 호출하고 있습니다.

내가로드 할 때 사용하는 기능입니다, 내 응용 프로그램을 프로파일과 시간이 많이 소요되는 하나 다음 ColorBox에 대한

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

많은 시간을 소요하는 또 다른 기능은 생성자를 객체, 특히 내가 사용하고있는 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)과 같은 것? –