2010-12-09 4 views
5

У нас есть довольно большое приложение silverlight 4. Мы находимся в процессе обнаружения утечек памяти в приложении, и это превратилось в сложную задачу.Утечки памяти Silverlight

Все изменилось полностью с этим, для тех из вас, кто видел оригинальный пост!

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

Так что я нашел этот блог,

http://blogs.msdn.com/b/slperf/archive/2010/08/19/analyzing-silverlight-memory-usage-part-1-obtaining-measurements.aspx

который был превосходен. Я использовал xPerf и xPerfViewer для просмотра родной кучи и посмотрел, что, по моему мнению, является фактической утечкой памяти.

Так что я могу увидеть трассировки стека, который выглядит,

CCoreServices::Draw 
    CCoreServices::Tick 
    CUElement::Render 
     CUIElement::Render 
     CUIElement::RenderWithTransform 
     CUIElement::RenderVisual 
     CUIElement::RenderChildren 
      {Repeat of the above in a recursive fashion} 

Таким образом, в этом методе «Рендер» где-то выделяет около 520 байт памяти, и, насколько я могу сказать, это не освободите его.

Я могу также увидеть метод или класс называется

SDBitmapCreate 

утечка памяти тоже.

Интересно, потому что кажется, что я что-то нашел, но я не совсем уверен, что.

Любые другие предложения?

Спасибо.

+0

Как вы используете ANT для обнаружения утечек памяти? Единственным «ANT», о котором я знаю (или смог найти через Google), является инструмент сборки Java (http://ant.apache.org/). Это то, о чем вы говорите, или есть какой-то инструмент Silverlight ANT, о котором я не знаю (и явно должен)? – 2010-12-14 19:11:43

+0

Не берите в голову, заметила это в конце концов: http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/ – 2010-12-14 21:06:28

+0

Да, это тот. Вы можете фильтровать по пространству имен, и обычно с утечкой памяти вы ожидаете увидеть классы в своих собственных пространствах имен, которые протекают. Здесь дело не в том, что материал в оболочке silverlight протекает. Я уверен, что мы это вызываем, но это просто усложняет задачу, и труднее завершить дело. – peter 2010-12-17 00:15:15

ответ

4

First Off, я не знаю никаких инструментов для утечки памяти для silverlight.

Я испытал то, что я думал, где проблемы с утечкой памяти несколько недель назад. Оказывается, мое приложение Silverlight содержало детей-изгоев в холсте.

Моя проблема может быть не вашей проблемой, но это может заставить вас думать.

Прежде чем я заново заполнил список своими результатами с сервера, мне пришлось удалить всех детей из соответствующего холста. Убрать этот список было недостаточно:

 for (int i = 0; i < boxDataLabel.Count; i++) 
     { 
      canvaz.Children.Remove((Label)boxDataLabel[i]); 
     } 
     boxDataLabel.Clear(); 

boxDataLabel - это список типов этикеток.

удачи.

6

Существует неплохой учебник по устранению утечек памяти Silverlight здесь: http://davybrion.com/blog/2009/08/finding-memory-leaks-in-silverlight-with-windbg/. Это сложно, и вам приходится иметь дело с командами WinDBG, но я нашел его полезным в прошлом. Конечно, это не отвечает конкретно на ваш вопрос, но может указывать вам в правильном направлении.

2

Существует официальная утечка памяти относительно встроенных DataTemplates в Xaml. Вы можете прочитать о нем нить: http://forums.silverlight.net/forums/t/171739.aspx.

Корпорация Майкрософт выпустила служебную версию (сборка обновления 4.0.50826.0), который должен исправить проблему: http://timheuer.com/blog/archive/2010/09/01/silverlight-service-release-september-2010-gdr1.aspx

Не забудьте обновить минимальную версию в html-файле хоста, если исправление для службы (некоторые из) ваших проблем.

1

Если бы я был в вашей ситуации, я бы попытался создать простое тестовое приложение, которое демонстрирует утечку, просто чтобы проверить его, он повторяется вне вашего фактического кода. Это доказывает, что это не тонкая ошибка в вашем коде. Затем я отправлю тестовое приложение на форумы MS Silverlight, на которые будут следить люди MS. Если у вас есть подписка на MSDN или у вашей компании есть соглашение о поддержке с MS, я также открою «билет» (забудьте о том, что они на самом деле называют) с MS.

Смежные вопросы