Слишком высокое использование памяти в программе на C # - PullRequest
1 голос
/ 24 ноября 2010

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

Однако при создании моего небольшого приложения и получении от него минимальных функций, кажется, стоит огромная стоимость памяти. Это ~ 40 КБ, с некоторыми изображениями в нем, но начинается с 20 МБ памяти, и после выполнения некоторых действий в нем доходит до 30 секунд.

По сравнению с другими приложениями .NET, которые я запускаю одновременно, их размер в 3 раза больше.

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

Есть ли какие-то другие настройки, которые мне не хватает? Или я не пишу свой код правильно из-за этого огромного несоответствия? Я подумал, что должен решить эту проблему, прежде чем пытаться работать с разработкой для Windows Phone 7, что и было моей целью, так как память будет гораздо более серьезной проблемой.

Обновление: Программа представляет собой программу для чтения RSS, которая просто проверяет канал Twitter и анализирует данные в поле списка с некоторой дополнительной информацией на основе хэш-тега. Я надеюсь, что есть бесплатное или очень недорогое решение этой проблемы, так как это было просто хобби, которое я выбрал, и поэтому дорогие программы профилировщиков профессионального уровня кажутся слишком дорогими для моих намерений.

Ответы [ 4 ]

1 голос
/ 24 ноября 2010

Я определенно согласен с Робом в том, что профилировщик скажет вам, есть ли какие-либо утечки памяти или неэффективность использования в вашем коде.Однако вы должны помнить, что даже если у вас небольшое приложение .NET, вы (в дополнение к собственному коду) будете загружать CLR, JIT-компилятор, многочисленные сборки фреймворков и т. Д. И т. Д. Кроме того, если после анализа вашего приложения GCпредсказывает, что вам понадобится много памяти кучи, она может изменить размер кучи в сторону увеличения, чтобы обеспечить быстрое выделение ресурсов и т. д. (который может уменьшиться в размере, если есть нагрузка на ресурсы памяти.

Так что вТаким образом, очевидно, что большое выделение оперативной памяти может не указывать на какие-либо проблемы, но профилирование позволит вам дважды проверить эту проблему.

0 голосов
/ 24 ноября 2010

Я недавно столкнулся с подобной проблемой и нашел полезным использовать этот бесплатный инструмент от Sysinternals: VMMAP

Это в основном дает вам представление о том, сколько памяти фактически используется приложением и где и что выделяет Windows. Это в основном случай выделения памяти в Windows и .NET, чтобы ваше приложение работало лучше и уменьшало объем выделяемой памяти.

0 голосов
/ 24 ноября 2010

Можно предположить, что вы постоянно создаете новые объекты при опросе ваших RSS-каналов, и даже если вы не используете «большинство» из них, они все еще находятся в памяти, пока сборщик мусора не соберется для их сбора. Само по себе это не проблема, но может показаться, что ваше приложение занимает больше памяти.

0 голосов
/ 24 ноября 2010

Используйте профилировщик памяти (http://www.google.co.uk/search?q=dot+net+memory+profiler - мне самому нравится DotTrace), и вы сможете найти причину этого.

Профилирование - лучший способ, потому что в противном случае вы можете «починить» что-то, что даже не сломалось

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