SWT 테이블에 엄청난 양의 행을 표시하는 방법은 무엇입니까? 거대한 것은 20K 줄 이상의 20 열입니다. 왜 내가 많은 양의 데이터를 보여줄 필요가 있는지 묻지 마라. 요점이 아니다. 요점은 최종 사용자가 지루해하지 않도록 가능한 한 빨리 작동시키는 것입니다. 각 행은 일부 개체의 인스턴스를 표시하고 열은 해당 속성 (일부)을 나타냅니다. JFace 컨텐트/라벨 공급자 패턴을 사용하려고 생각했지만 데이터가있는 테이블을 직접 치는 것보다 속도가 더 느릴 까봐 걱정됩니다. 이것은 다음과 같습니다.SWT/JFace RCP 애플리케이션에 거대한 테이블 채우기
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
내 컴퓨터에 20k 레코드를 그리는 데 20 초 정도 걸립니다. Windows에서 가장 큰 성능 문제는 새 테이블 항목이 만들어지고 텍스트로 채워질 때 SWT가 보낸 엄청난 양의 네이티브 윈도우 메시지 때문입니다. 나는 위대한 해결 방법을 발견했습니다 - 채우기 전에 표를 숨긴 다음 완료되면 표시하십시오. 루프가 끝나기 전에 table.setVisible (false)를 호출하고 table.setVisible (true)를 호출하면 속도가 6-7 배 올라갑니다!
나는 속도를 더 높이고 싶습니다. 무엇을 제안 하시겠습니까? 또한이 위젯을 숨기고있는이 트릭이 SWT (일명 Linux)의 비 Windows 구현에서 어떻게 작동 할까?
이것은 정확히 솔루션입니다. 이제 100K 행을 채우는 데는 거의 제로 시간이 걸리고, 꽤 놀라운 기능입니다. – Dima
@ralfstx 전화 해 주실 수 있나요? 이처럼 테이블을 어떻게 필터링 할 수 있습니까? –
@AdamArold 이에 대해서는 'DeferredContentProvider'를 살펴볼 수 있습니다 (예 : this [tutorial] (http://waynebeaton.wordpress.com/2008/01/16/deferredcontentprovider-my-new-favourite-thing/) 참조). . 하지만 스크롤 할 때 새로 고침 할 때 몇 가지 문제가있을 수 있음을 알아야합니다. https://bugs.eclipse.org/bugs/show_bug.cgi?id=146799 – hnn