4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
1

Большое потребление памяти при вызове метода

03.04.2012, 12:15. Показов 1157. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наблюдаю очень странное поведение Visual Studio 2008. В моём проекте на C# есть один метод, который содержит большое число кода (циклы, условия), но не создаёт большое число объектов. При первом вызове этого метода потребление памяти резко подскакивает до 3 ГБ, причём происходит это при вхождении на первую же строчку. Код в этой строчке не вызывает подозрений:
C#
1
bool nocombine = false;
Как только выполение начинает двигаться дальше, то съеденных 3 ГБ как не бывало. При повторном вызове метода таких симптомов не наблюдается. Что это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 12:15
Ответы с готовыми решениями:

Слишком большое потребление оперативной памяти в простом приложении
Привет. Это простое приложение чтобы делать скриншоты. Скажите почему оно занимает слишком много...

Большое потребление оперативной памяти при долгой работе
Добрый день гуру программирования. Проблема у меня такая. Приложение потребляет слишком много...

Большое потребление памяти приложением
Здравствуйте! Как всегда нужна ваша помощь... Почему происходит ошибка компиляции при увеличении...

nginx+php-fpm debian - большое потребление памяти
Больше потребление cached памяти на сервере. (Графиг приложен). mysql, memcached вынесены на...

10
Эксперт Java
4088 / 3822 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
03.04.2012, 12:17 2
Как диагностируете резкое потребление памяти?
Покажите код.
0
4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
03.04.2012, 12:55  [ТС] 3
Цитата Сообщение от turbanoff Посмотреть сообщение
Как диагностируете резкое потребление памяти?
Покажите код.
Диагностирую просто - открываю диспетчер задач и вижу, что мой процесс начинает съедать 3 ГБ (было в районе 100 МБ).
Код показать не могу, там около 20 тыс. строк в этом методе.
0
Эксперт .NET
17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
03.04.2012, 13:25 4
Потребление памяти подскакивает только в режиме отладки или в релизе тоже?

Цитата Сообщение от Chuckcha Посмотреть сообщение
там около 20 тыс. строк
Сурово. Про правило одного экрана не слышали?

Если во время отладки, то отладчик тупо "задыхается" от скормленного ему 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
Цитата Сообщение от kolorotur Посмотреть сообщение
Потребление памяти подскакивает только в режиме отладки или в релизе тоже?


Сурово. Про правило одного экрана не слышали?

Если во время отладки, то отладчик тупо "задыхается" от скормленного ему 20-тысячного метода, т.к. он создает профайлы для всех объектов и переменных, используемых в методе, даже если выполнение до них еще не дошло.
Настоятельно рекомендую разбить метод на несколько, строчек по 30 каждый.
Как раз в результате получится что-то около 666-и методов - самый раз для такой дьявольской программулины.
Память поднимается и там и там (но в релизе это не страшно, а вот в отладке здорово мешает, т.к. у меня 3 ГБ оперативной памяти).
Объектов в этом методе немного создаётся. Да и если много, то ведь они бы создавались в момент вызова конструктора, а не в первой же строчке метода?
Так что видимо дело именно в числе строк одного метода...
В принципе можно вынести код в 700 методов, но будет не очень удобно.
0
Эксперт .NET
17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
03.04.2012, 13:41 7
Цитата Сообщение от Chuckcha Посмотреть сообщение
Так что видимо дело именно в числе строк одного метода...
Ну если память подскакивает и в режиме релиза, будучи запущенной напрямую, а не из студии, то проблема не в количестве строк.
Скорее всего у вас объекты-таки создаются, просто вы о них не знаете. Просто так память не подскакивает.
Без кода, к сожалению, остается только гадать.
0
Эксперт Java
4088 / 3822 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
03.04.2012, 13:42 8
Цитата Сообщение от Chuckcha Посмотреть сообщение
было в районе 100 МБ
Я что-то упустил, когда было ? До того как был написан супер метод?
0
4 / 4 / 2
Регистрация: 12.08.2011
Сообщений: 95
03.04.2012, 13:50  [ТС] 9
Цитата Сообщение от turbanoff Посмотреть сообщение
Я что-то упустил, когда было ? До того как был написан супер метод?
До первого вызова метода, после его первого вызова и во время его любого вызова (начиная со второго).

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну если память подскакивает и в режиме релиза, будучи запущенной напрямую, а не из студии, то проблема не в количестве строк.
Скорее всего у вас объекты-таки создаются, просто вы о них не знаете. Просто так память не подскакивает.
Без кода, к сожалению, остается только гадать.
Так эти объекты создаются только при первом запуске? Что меняется начиная со второго?
0
35 / 35 / 1
Регистрация: 14.01.2011
Сообщений: 111
03.04.2012, 13:53 10
я тоже хочу его увидеть. код в студию
0
Эксперт .NET
17207 / 12661 / 3321
Регистрация: 17.09.2011
Сообщений: 20,936
03.04.2012, 13:54 11
Цитата Сообщение от Chuckcha Посмотреть сообщение
Так эти объекты создаются только при первом запуске? Что меняется начиная со второго?
Не имею понятия ни по первому, ни по второму пункту. Всё по той же причине.
Вы, например, со 100%-й уверенностью можете сказать, что метод не имеет побочных эффектов?
"Создание объектов" - тоже тема обширная, т.к. "создаваться" они могут самыми различными способами, не последним из которых является кеширование.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2012, 13:54
Помогаю со студенческими работами здесь

Большое потребление ОЗУ, как можно хоть немного уменьшить потребление ?
Может есть какие нибудь советы или еще что нибудь ? В основном приложение работает библиотекой...

Windows 7 большое потребление RAM при скачивании
При простое, система потребляет около 1 Гб памяти. Если скачать файл объемом 1-1,5 Гб, то память...

Большое потребление ОЗУ при обработке запросов
8.1. УТП Обработка ОбменССайтом, доработанная само собой. Все идет по схеме...

Потребление памяти при смене сцены
Приветствую всех. Я создал пустой проект, сделал в нем 2 сцены, в сцены накидал спрайтов просто для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru