Утечки памяти Silverlight - PullRequest
       15

Утечки памяти Silverlight

6 голосов
/ 10 декабря 2010

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

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

Я понял, что профилировщик памяти 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}

Так что вэтот метод 'Render' где-то выделяет около 520 байт памяти, и, насколько я могу судить, не освобождает его.

Я также вижу метод или класс с именем

SDBitmapCreate
*У 1021 * тоже течет память.

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

Есть еще какие-нибудь предложения?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 14 декабря 2010

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

4 голосов
/ 10 декабря 2010

Во-первых, я не знаю ни одного инструмента утечки памяти для silverlight.

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

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

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

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

boxDataLabel - это список типа Label.

удачи.

2 голосов
/ 15 декабря 2010

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

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

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

1 голос
/ 20 декабря 2010

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

...