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

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

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

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

13.08.2008 19:56:52
«.NET качается, тогда как CF - просто оболочка NotImplementedException». Я люблю эту цитату!
Stormenet 15.12.2008 09:34:17
3 ОТВЕТА
РЕШЕНИЕ

Попробуйте включить протоколирование Interop .

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

3
13.08.2008 20:33:46
Я знаю, что это старый пост, но, надеюсь, вы увидите это и ответите. Вторая ссылка идет на msdn.microsoft.com/en-us/vstudio/aa496123, который, кажется, сайт верхнего уровня для visual studio. Вы помните, что вы связали?
Miserable Variable 23.08.2012 17:16:25

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

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

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

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

1
14.08.2008 16:06:04

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

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

1
27.09.2008 11:35:15