2012-03-28 2 views
1

다음 코드를 사용하려고하지만 응용 프로그램 성능이 좋지 않습니다.데이터베이스에서 이미지 및 텍스트를 가져 오는 동안 속도를 높이려면 어떻게해야합니까?

"dt_Images.ToList()"에 2000 개의 이미지 목록이 있습니다. CS에서

:

foreach (var dr in dt_Images.ToList()) 
      { 
       BTN = new Button(); 
       BTN.Name = dr.Name.ToString(); 
       BTN.Image = dr.Image; 
       BTN.Text = dr.text.ToString(); 
       flowLayoutPanel1.Controls.Add(BTN); 
       BTN.Click += new EventHandler(this.pic_Click); 
      } 

나는 또한 목록보기와 결합하지만 원하는 속도를 얻지 못하고하려고했다.

flowLayoutPanel로 바인딩하는 동안 속도를 높이려면 어떻게해야합니까?

컨트롤에서 직접 DataSource를 바인딩 할 수 있습니까? 그렇다면 어떤 컨트롤을 사용 했습니까?

은 일반적으로 당신은 당신이 보여 사진을 다운로드해야하고 주변의 몇 날

+0

이미지는 데이터베이스에 BLOB 데이터로 저장되며 중량이 큽니다. 이 정보를 프리 페치하여이를 메모리에 보유 할 수 있습니까? 2000은 귀하의 이미지가 합리적으로 작은 (KB 단위가 아닌, MB로 제공) 큰 덩어리가 아닙니다. – questzen

+0

내 모든 이미지는 KB이지만이 양식을로드하는 데 2 ​​분이 걸립니다. @questzen – Tulsi

+0

데이터베이스 가져 오기는 시간이 많이 걸립니다. 로컬 메모리에 이미지를 캐싱하여 처리 시간을 줄일 수 있습니다. 응용 프로그램에서 허용하는 경우이 2000 개체를 손쉽게 초기화하십시오. – questzen

답변

0

나는 FlowLayout 패널을 사용하고 있습니다. 나는 당신이 자식 컨트롤을 추가 할 때마다 전체 레이아웃을 재실행하는 것으로 의심된다. ​​너무 많은 시간이 걸릴 수도있다.

당신은 전체 루프이 방법을 둘러싸 시도 할 수

flowLayoutPanel1.SuspendLayout(); 

foreach (var dr in dt_Images.ToList()) 
     { 
      BTN = new Button(); 
      BTN.Name = dr.Name.ToString(); 
      BTN.Image = dr.Image; 
      BTN.Text = dr.text.ToString(); 
      flowLayoutPanel1.Controls.Add(BTN); 
      BTN.Click += new EventHandler(this.pic_Click); 
     } 

flowLayoutPanel1.ResumeLayout(); 

당신은 심지어 답변을 here 사용하여 그림을 해제하여 더 나은 성능을 달성하기 위해 시도 할 수 있습니다.

1

내가 생각 도와주세요. 그래서 5 번과 5 번을 현재보다 먼저 다운로드하면 속도가 좋아질 것입니다.

0

우리는 항상 성능을 향상시킬 수는 없지만 성능을 확실히 향상시킬 수 있습니다. UI 애플리케이션을 개발 중이라고 가정하면 다음 논리를 참조하십시오.

응용 프로그램을 시작할 때 모든 이미지와 관련 데이터를 가져 오십시오. 이것은 시간이 오래 걸리지 만 걱정하지 마십시오. 이러한 객체를 메모리에 캐시하십시오 (HashMap?). 사용자에 대한 플로우 패널을 생성해야 할 필요가 발견되면 캐시에서 검색하여 이미지를 빠르게 렌더링하십시오.

실행중인 sql이 데이터베이스 왕복을 강제 실행합니다. 캐시를 채우기위한 조건 (대량 반입)이없는 'select *'를 수행하십시오.

0

아마도 버튼을 사용하려고 할 때만 버튼을 만들어야합니다. (. 또는 ykatchou의 대답으로 그들 중 몇)

당신이 한 번 모두를 만들려 할 하더라도 - 당신이 BackgroundWorker를 사용하여 만드는 더 나을 수 있습니다.

관련 문제