Как лучше всего найти ВСЮ память при разработке на Compact Framework?

StackOverflow https://stackoverflow.com/questions/10309

  •  08-06-2019
  •  | 
  •  

Вопрос

Я использовал CF Удаленный монитор производительности, однако, похоже, это отслеживает только память, инициализированную в управляемом мире, а не в неуправляемом мире.Ну, я могу только предполагать это, поскольку числа, указанные в профилировщике, намного меньше максимально допустимого (32 МБ на CE 5).Профилирование конкретного приложения с помощью RPM показало мне, что общий объем использования всех кешей достигает примерно 12 МБ, а затем медленно сокращается, поскольку (я предполагаю) что-то неуправляемое начинает требовать больше памяти.Ползунок памяти в системе также показывает, что устройству очень не хватает памяти.Если я остановлю процесс, ползунок покажет, что вся память возвращается.Значит, это (?) этот управляемый процесс поглощает память.

Есть ли какой-нибудь простой (почти?) способ каким-либо образом отслеживать использование неуправляемой памяти, который мог бы позволить мне сопоставить его с соответствующими вызовами P/Invoke?

РЕДАКТИРОВАТЬ:Для всех, кто меняет теги, это не .NET., такая пометка вопроса сбивает с толку.Это .NETCF/Compact Framework.Я знаю, что они кажутся похожими, но они разные, потому что .NET великолепен, тогда как CF — это, по сути, просто оболочка NotImplementedException.

Это было полезно?

Решение

Попробуйте включить Журнал взаимодействия.

Кроме того, если у вас есть доступ к коду используемой вами собственной библиотеки DLL, проверьте это: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

Другие советы

Я определенно некоторое время боролся с неуправляемыми проблемами в управляемых приложениях C# — это непросто.

Что я считаю наиболее полезным, так это регулярный вывод в текстовый файл журнала.Например, вы можете распечатать вывод ГлобалМемориСтатус каждые пару минут вместе с регистрацией каждый раз, когда вы загружаете новую форму.Отсюда вы можете, по крайней мере, увидеть, что либо память постепенно разрушается, либо в определенное время дня исчезают огромные куски памяти.

Мы обнаружили постепенную потерю памяти в течение всего дня, пока устройство использовалось.В конце концов мы обнаружили, что устройство сканирования штрих-кода инициализировалось без особой причины в нашем базовом классе Form (я виню в этом предыдущего разработчика!:-)

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

Хорошо, я использую C++ для CE, а не C#, так что это может быть бесполезно, но...

Я использую пакет под названием Набор инструментов для входа который отслеживает использование памяти и ресурсов, утечки и исключения в Windows CE.Очень похоже на облегченную версию Boundschecker для CE.Делает трюк в большинстве случаев.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top