c # и сборка мусора - PullRequest
       22

c # и сборка мусора

0 голосов
/ 28 октября 2011

В сборщике мусора .NET должен быть секрет, который я не понимаю на данный момент.В нашем приложении C # WinForms есть диалог, который загружает очень много объектов с помощью инструмента OR mapper.Этот процесс занимает много памяти, и мы думаем, что большая часть этой памяти может быть занята строками.Когда мы открываем это диалоговое окно, диспетчер задач показывает 900 МБ использования памяти, и, выполнив запрос снова, мы получаем исключение нехватки памяти.Whow.

Теперь мы получили подсказку о том, что какой-то тип сборки мусора выполняется, когда мы минимизируем приложение.Делая это и максимизируя его снова, приложение потребляет только 10 МБ.Круто.

Но теперь, когда мы снова делаем запрос, потребление памяти внезапно возвращается к 900 МБ, и мы снова получаем исключение нехватки памяти.

Что здесь происходит и как мы можем уменьшить потребление памяти?В таких случаях, как можно исследовать и уменьшить потребление памяти?

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

Существует множество профилей профилей памяти .Net, которые помогают диагностировать подобные проблемы. Мой любимый dotTrace от JetBrains

0 голосов
/ 28 октября 2011

Вы уверены, что все ваши циклы заканчиваются. Я знаю, что самой большой проблемой, с которой я столкнулся с ресурсами в своих настольных приложениях, были циклы, которые зависали или не заканчивались успешно. Вы уверены, что ваш запрос возвращается правильно?

Вы делаете больше, чем просто запрашиваете? Я бы позаботился о том, чтобы все ваши процессы начинались и заканчивались правильно.

...