4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
|
||||||
1 | ||||||
Большое потребление памяти при вызове метода03.04.2012, 12:15. Показов 1157. Ответов 10
Метки нет Все метки)
(
Наблюдаю очень странное поведение Visual Studio 2008. В моём проекте на C# есть один метод, который содержит большое число кода (циклы, условия), но не создаёт большое число объектов. При первом вызове этого метода потребление памяти резко подскакивает до 3 ГБ, причём происходит это при вхождении на первую же строчку. Код в этой строчке не вызывает подозрений:
0
|
|
03.04.2012, 12:15 | |
Ответы с готовыми решениями:
10
Слишком большое потребление оперативной памяти в простом приложении Большое потребление оперативной памяти при долгой работе Большое потребление памяти приложением nginx+php-fpm debian - большое потребление памяти |
4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
|
|
03.04.2012, 12:55 [ТС] | 3 |
Диагностирую просто - открываю диспетчер задач и вижу, что мой процесс начинает съедать 3 ГБ (было в районе 100 МБ).
Код показать не могу, там около 20 тыс. строк в этом методе.
0
|
![]() 17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
|
|
03.04.2012, 13:25 | 4 |
Потребление памяти подскакивает только в режиме отладки или в релизе тоже?
Сурово. Про правило одного экрана не слышали? Если во время отладки, то отладчик тупо "задыхается" от скормленного ему 20-тысячного метода, т.к. он создает профайлы для всех объектов и переменных, используемых в методе, даже если выполнение до них еще не дошло. Настоятельно рекомендую разбить метод на несколько, строчек по 30 каждый. Как раз в результате получится что-то около 666-и методов - самый раз для такой дьявольской программулины.
1
|
m0nax
|
03.04.2012, 13:26
#5
|
Не по теме: 20к строк в 1 методе это мощно )
0
|
4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
|
|
03.04.2012, 13:36 [ТС] | 6 |
Память поднимается и там и там (но в релизе это не страшно, а вот в отладке здорово мешает, т.к. у меня 3 ГБ оперативной памяти).
Объектов в этом методе немного создаётся. Да и если много, то ведь они бы создавались в момент вызова конструктора, а не в первой же строчке метода? Так что видимо дело именно в числе строк одного метода... В принципе можно вынести код в 700 методов, но будет не очень удобно.
0
|
![]() 17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
|
|
03.04.2012, 13:41 | 7 |
Ну если память подскакивает и в режиме релиза, будучи запущенной напрямую, а не из студии, то проблема не в количестве строк.
Скорее всего у вас объекты-таки создаются, просто вы о них не знаете. Просто так память не подскакивает. Без кода, к сожалению, остается только гадать.
0
|
4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
|
|
03.04.2012, 13:50 [ТС] | 9 |
До первого вызова метода, после его первого вызова и во время его любого вызова (начиная со второго).
Добавлено через 1 минуту Так эти объекты создаются только при первом запуске? Что меняется начиная со второго?
0
|
35 / 35 / 1
Регистрация: 14.01.2011
Сообщений: 111
|
|
03.04.2012, 13:53 | 10 |
я тоже хочу его увидеть. код в студию
0
|
![]() 17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
|
|
03.04.2012, 13:54 | 11 |
Не имею понятия ни по первому, ни по второму пункту. Всё по той же причине.
Вы, например, со 100%-й уверенностью можете сказать, что метод не имеет побочных эффектов? "Создание объектов" - тоже тема обширная, т.к. "создаваться" они могут самыми различными способами, не последним из которых является кеширование.
0
|
03.04.2012, 13:54 | |
Помогаю со студенческими работами здесь
11
Большое потребление ОЗУ, как можно хоть немного уменьшить потребление ? Windows 7 большое потребление RAM при скачивании Большое потребление ОЗУ при обработке запросов Потребление памяти при смене сцены Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |