2012-07-02 3 views
1

performant swing 구성 요소를 만드는 방법에 대해 질문이 있습니다.FIFO 버퍼의 Performant Bar Chart

구성 요소에는 막대 그래프가 있어야합니다. 구성 요소의 데이터는 separte FIFO 버퍼 클래스에 저장됩니다. 버퍼가 업데이트 될 때마다 구성 요소에 알립니다.

현재 데이터가 변경 될 때마다 구성 요소가 BufferedImage를 그립니다. 막 대형 차트 구성 요소의 paintComponent 메소드는 작성된 BufferedImage를 그립니다.

내 애플리케이션에 많은 데이터 변경 사항이 있기 때문에 BufferedImage의 페인팅을 개선하려고합니다. 막 대형 차트의 대부분은 동일하게 유지됩니다. 그냥 오른쪽으로 이동하고 막대 그래프의 왼쪽에 최신 데이터 변경 사항이 추가됩니다.

현재 BufferedImage 전체가 버퍼에 저장된 데이터에서 재생성됩니다. 내가 생각할 수있는 것은 AffineTransformation을 사용하여 이전 BufferedImage를 이동하고 최근에 추가 된 데이터 만 추가하는 것입니다. 이것에 의해, BufferedImage로 draw 조작의 양이 엄청나게 감소합니다.

그러나 이것이 응용 프로그램의 속도를 높이는 지 모르겠습니다. BufferedImage의 AffineTransformation은 얼마나 비쌉니까?

모든 의견을 환영합니다. 또한 performant 스윙 응용 프로그램을 만드는 방법에 대한 다른 힌트를 제공합니다. 베이스 라인의 일종없이 사전

+0

예상되는로드 및 듀티 사이클을 표시하려면 최소한 질문을 편집해야합니다. – trashgod

답변

1

에서

덕분에, 그것은 개선을 측정하는 것은 매우 어렵다. 처음에는 here으로 표시된 두 가지 방법을 JFreeChart을 사용하여 비교할 수 있습니다. DynamicTimeSeriesCollection은 10Hz에서 덩어리가납니다. 나는 다른 것을 자세히 검사하지는 않았지만 유연하게 보입니다.

+0

JFreeChart로 이미 약간 연주했지만 올바른 선택이 아닌 것 같습니다. 응용 프로그램은 기존 응용 프로그램과 유사해야합니다. 그래서 저는 JFreeChart에 들어가 조정을 시작했습니다. 그러나 나는 단지 아주 간단한 차트 만 필요로하기 때문에 자신의 구성 요소를 설계하는 것이 더 효율적이고 유연하게 될 것이라고 생각했습니다. – hami

+0

나는 가끔 그런 식으로 갔지만 항상 확장성에 복귀했다. 기능을 변경하고 새 차트를 추가하는 것이 훨씬 쉽습니다. 차트에 대한 이상한 점 : 아무도 단 한 명만 원합니다. YMMV. 나는로드와 듀티 사이클에 대해 아직도 궁금하다. – trashgod