2011-01-19 5 views
0

각 노드가 TreeNodeViewModel 인 Silverlight TreeView가 있습니다. TreeNodeViewModel의 속성은 Text, IsSelected, ImageUri 및 Parent입니다. 약 700-1000 개의 TreeView 항목을로드하고 있습니다.MVVM 패턴을 사용하는 Silverlight TreeView의 크기가 큽니다.

HierarchicalDataTemplate의 바인딩을 통해 TreeView를로드 한 후 IE 브라우저의 풋 프린트가 약 48,000kb에서 165,000kb로 증가하는 것으로 보입니다. 나는 ExpandView과 CollapseAll에 대한 바인딩을 가지고있는 TreeView 자체에 대해 ViewModel을 사용하고 있습니다. expand 명령을 사용하면 IE 풋 프린트가 거의 300,000kb까지 증가합니다. 트리가 완전히 확장되면 & 확장을 반복해도 풋 프린트가 증가하지는 않습니다. 즉, 모든 ViewModel이 작성되면 레벨이 해제 된 것처럼 보입니다.

제 질문은 약 800 개의 TreeView 항목을로드하는 경우 내 경우와 같이 크기가 커야한다는 것입니다. 많은 양의 데이터를로드하는 것으로부터 IE의 과도한 공간을 본 사람이 있습니까?

개발중인 SL 앱의 배경 : 하드웨어 장치 (일명 : 서버)는 독점 하드웨어이며 링크시스 라우터와 유사한 내장 웹 서버를 가지고 있습니다. 압축 된 구성 파일 (모델 엔터티)이 장치에로드되고 SL 응용 프로그램이 DataContractSerializer를 사용하여 압축 된 파일을 다운로드하고 압축을 풀어 역 직렬화합니다. 압축 된 파일은 약 1.75MB이고, 압축되지 않은 파일은 약 12.5MB입니다.

첫 번째 생각은 모델의 비 직렬화로 인해 IE 풋 프린트가 큽니다. 처음에 IE가 시작되면 풋 프린트는 약 7500kb이고 모델을 메모리에로드하면 최대 48,000kb가 실행됩니다.

모든 의견이나 제안은 대단히 감사하겠습니다.

+0

다른 브라우저의 동작은 어떻습니까? – CaptainPlanet

+0

노드에 이미지 속성이 있습니다.당신의 템플릿은 그것을 묶는'Image' 컨트롤을 포함하고 있습니까? 템플릿에서 제거하려고 했습니까? –

+0

이 동작은 다른 브라우저에서도 동일합니다 .. – gcadmes

답변

-1

적어도 YourKit 프로파일 러와 같은 프로파일 러를 사용하여 메모리를 차지하는 메모리 프로파일을 얻는 것이 좋습니다. 핫스팟이 메모리 소비 측면에서 무엇인지 파악하고 메모리 누수를 추적하는 데 도움이됩니다.

165MB가 너무 많습니까? 이 메모리 사용량이 GC에 너무 많은 압력을 가하지 않고 대부분 가비지 일 수 있으므로 GC를 강제로 수행 할 수 있습니까?

확실히 프로필 작성기를 사용해 앱 프로필을 더 잘 이해할 수 있습니다.

+0

어떻게 SL 앱을 프로파일 하시겠습니까? 프로필이 작동하지 않습니다. AFAIK –

+0

YourKit 프로파일 러는 Silverlight와 완벽하게 작동합니다. 개미 프로파일 러도 않습니다. –

0

이 질문에 대한 답변이 아니지만 : 표준 실버 라이트 컨트롤 + 실버 라이트 툴킷을 사용하지 않습니다. 우리는 벌레와 싸우기에 충분하지 않았습니다. 그냥 두 사람이 :

  1. 당신은 childwidow에 날짜 선택기 (또는 timepicher)를 넣을 수 없습니다, 그 스타일은 실패하고 사물이 작동하는 얻을 당신의 resourses의에 다시 declarate있을 것이다.

  2. TreeView - 트리 뷰 상태 (어떤 노드가 확장되어 있고 어떤 노드가 아닌지)를 저장할 수 있지만 복원하는 것은 매우 까다 롭습니다. 정말 까다 롭습니다 : 노드를 확장 할 때까지 노드가 생성되지 않습니다.

어쨌든, 나는 무엇에 관해 이야기하고 있습니까? 가능한 빨리 표준 콘트롤을 포기하고, 상사가 Telerik, Devexpress 또는 원하는 것을 구입하도록하십시오. Silverlight와 wpf는 이미 4 번째 버전이며, 기본 컨트롤 라이브러리, 메모리 누수, 버그가 수정되지 않아서 기본적인 작업을 수행 할 수 없습니다.

관련 문제