Silverlight на Mac - как отладить утечку памяти? - PullRequest
3 голосов
/ 22 марта 2012

Я написал приложение Silverlight, которое работает как загрузчик для Amazon S3.Он отлично работает на ПК, но на Mac имеет огромную утечку памяти.

Проблема: я не знаю, как его отладить.WinDbg, лучшее предложение Google, очевидно, отсутствует.Я не думаю, что я могу получить подсказку изнутри VS (при подключении через удаленную отладку).И я не проверял, но не думаю, что отладчики Mac OS будут полезны.

Особое поведение заключается в том, что при загрузке файла он остается в памяти.Поскольку файлы могут иметь размер несколько ГБ, они могут занимать всю память и вызывать сбой Silverlight.Я предполагаю, что это может быть ошибка в Silverlight, но, возможно, я смогу найти обходной путь, если бы знал точную проблему.В Windows есть также подтвержденная ошибка https://connect.microsoft.com/VisualStudio/feedback/details/674960/writing-to-ms-internal-internalwebrequeststream-deadlocks-when-host-closes-request-stream#details, которую никто не хочет исправлять.

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

Ответы [ 3 ]

2 голосов
/ 18 апреля 2012

Оказалось, что ошибка HttpWebRequest.AllowWriteStreamBuffering = false (или мой обходной путь для Windows) вызывала ужасную утечку памяти (и другие тупики) на Mac.Поэтому я был вынужден включить буферизацию.Теперь все работает, за счет нестабильного прогресса и отчетов о скорости загрузки.

Жаль, что я не выучил метод для индуктивного выяснения этого.Пришлось обнаружить это более или менее случайно.

0 голосов
/ 22 марта 2012

Я бы попробовал запустить профилировщик, такой как SciTek .NET Memory Profiler, для версии Windows и убедиться, что вы правильно утилизируете все свои объекты и фактически не пропускаете туда.Надеюсь, это правильно перевести на Mac.(Большинство программистов очень плохо умеют правильно утилизировать свои объекты. И да, это имеет значение.)

0 голосов
/ 22 марта 2012

Вы пытались настроить удаленную отладку на Mac ? Это может не отследить утечку памяти, но, по крайней мере, вы можете пройтись по коду, чтобы увидеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...