Каков наилучший способ найти ВСЕ вашу память при разработке на Compact Framework? - PullRequest
6 голосов
/ 13 августа 2008

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

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

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

Ответы [ 3 ]

3 голосов
/ 14 августа 2008

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

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

1 голос
/ 27 сентября 2008

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

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

1 голос
/ 14 августа 2008

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

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

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

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

...