실제로 두 가지 질문을 가지고 있지만 그들은 가지가 하나로 이동 그래서 여기에 관련되어 ... 현재 TreeViewer
을 사용하여 표시되지 않은 트리 노드의 가비지 수집을 확인하는 방법게으른 및 이연 TreeViewer 질문
(SWT.VIRTUAL
) 및 ILazeTreeContentProvider
? 노드에 5000 개의 자식이있는 경우 뷰어가 표시하면 따라서 Out of Memory 오류가 발생합니다. 트리에 노드 수가 많고 리프가 많고 힙 크기가 충분하지 않은 경우 오류가 발생합니다. 많은 양의 데이터 (수십만 개의 개체 또는 수백만 개의)가있는 트리 뷰어를 닫지 않은 채로보기 때문에 메모리 누출을 피하는 방법이 있습니까? 아마도 뷰어/콘텐츠 제공 업체 요소의 유연성을 높일 수있는 콜백 인터페이스가 있을까요?
그것은 하나의 TreeViewer
(SWT.VIRTUAL
)에 대한 (DeferredTreeContentManager
)과 지연 (ILazyTreeContentProvider
)로드 DEFFERED 결합 할 수 있습니까? 예제 및 API를 통해 알 수 있듯이 주어진 시간에 둘 중 하나만 사용할 수 있지만 둘 다 동시에 사용할 수는 없습니다. 주어진 노드에 대해 보이는 하위 노드 만 가져 와서 Job API를 사용하여 별도의 스레드에서 가져옵니다. 나를 귀찮게하는 것은 지연된 접근 이 모든 자식을로드한다는 것입니다. 비록 다른 스레드에서, 최소한의 서브셋 만 동시에 표시 되더라도 여전히 모든 요소를로드합니다 ( ). 필요한 경우
나는 그 동안 뭔가 가지고 올 관리하는 경우 나는 기꺼이 여기를 공유 할 수 있도록 내가 현재 그와 함께 자신을 고민하고
... 내 질문에 코드 예제를 제공 할 수 있습니다.
감사합니다.
안부, Svilen
, 뷰어는 공급자에게 특정 요소가 표시 될 것임을보고합니다 (스크롤 또는 확장으로 인해). 현재 지연된 구현은 컨텐츠 제공자 메소드의 작업을 사용하여 쉽게 달성 할 수 있습니다. 두 방법의 문제점, 왜 독점적인지는 알 수 있습니다. 지연로드는 미리 요소 수를 알고 있다고 가정하고 내용이 표시되는 시간에 뷰어의 내용을 바꿉니다. 사용자가 스크롤하거나 확장 할 때마다 콘텐츠 (예 : 리메어 리소스)를로드하고 싶지 않습니다. – benez