Silverlight TreeView с использованием шаблона MVVM имеет большой размер - PullRequest
0 голосов
/ 19 января 2011

У меня есть Silverlight TreeView, где каждый узел является TreeNodeViewModel.Свойствами TreeNodeViewModel являются Text, IsSelected, ImageUri и Parent.Я загружаю от 700 до 1000 элементов TreeView.

Кажется, что происходит то, что после загрузки TreeView через привязку в HierarchicalDataTemplate размер браузера IE увеличивается с 48 000 КБ до 165 000 КБ.Я использую ViewModel для самого TreeView, который имеет привязки для ExpandAll и CollapseAll.Когда я запускаю команду расширения, размер IE продолжает расти почти до 300 000 КБ.Как только дерево полностью развернуто, повторение развернуть и свернуть не увеличивает след;то есть кажется, что он выравнивается после создания всех моделей представления.

Мой вопрос: если я загружаю около 800 элементов TreeView, ожидается ли, что площадь должна быть такой же большой, как в моем случае?Кто-нибудь когда-нибудь видел, чтобы IE загружал большие объемы данных?

Некоторые сведения о приложении SL, которое я разрабатываю: Аппаратное устройство (он же сервер) является проприетарным оборудованием и имеет встроенный веб-сервер., аналогично маршрутизатору linksys.Сжатый файл конфигурации (объекты модели) загружается на устройство, и приложение SL загружает его, распаковывает и десериализует его с помощью DataContractSerializer.Сжатый файл - около 1,75 МБ, без сжатия - около 12,5 МБ.

Моя первая мысль была о том, что размер IE был большим из-за десериализации модели.Первоначально при запуске IE занимаемая площадь составляет около 7500 КБ, при загрузке модели в память она достигает 48 000 КБ.

Будем весьма благодарны за любые мысли или предложения.

Ответы [ 2 ]

0 голосов
/ 20 января 2011

Может быть, это не ответ на ваш вопрос, но: Я не использую стандартные элементы управления silverlight + наборы инструментов silverlight. Мы изо всех сил боролись с их ошибками. Только двое из них:

  1. Вы не можете поместить указатель даты (или указатель времени) в childwidow, его стили потерпят неудачу, и вам придется повторно объявить в своих ресурсах, чтобы все заработало.

  2. TreeView - хотя вы можете сохранить состояние древовидной структуры (какие узлы расширены, а какие нет), восстановить его довольно сложно. ДЕЙСТВИТЕЛЬНО сложно: узлы даже не создаются, пока вы не расширите их родителей.

В любом случае, о чем я говорю? Откажитесь от стандартных контролов как можно скорее, заставьте своих боссов покупать Telerik, Devexpress или что угодно. Это уже четвертая версия silverlight и wpf, и некоторые базовые вещи не могут быть выполнены с помощью готовых библиотек управления, память все еще протекает, ошибки не исправляются.

0 голосов
/ 20 января 2011

Я бы порекомендовал использовать профилировщик, такой как профилировщик YourKit или тому подобное, чтобы хотя бы получить профиль памяти для того, что занимает память. Это поможет выяснить, каковы ваши горячие точки с точки зрения потребления памяти, и поможет отследить любые утечки памяти.

165 МБ это слишком много? Можете ли вы форсировать GC.Collect в том случае, если использование памяти не оказывает слишком большого давления на GC и может быть в основном мусором?

Обязательно попробуйте профилировщик, чтобы лучше понять профиль вашего приложения.

...