Странная схема использования памяти в приложении C # Windows Form - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь понять, что происходит в приложении, написанном на C #. Ниже приведены несколько изображений, снятых с монитора производительности. Синяя линия - это #Bytes во всех кучах. Зеленая линия - Размер кучи больших объектов. Я запускаю приложение и регистрируюсь. Приложение остается бездействующим. Первое изображение показывает, что LOH по какой-то причине увеличивается, а затем падает. Шаблон очень четкий. Что отвечает за такое поведение?

enter image description here

Подробнее. Я выполняю тяжелую обработку, начиная с A (см. Изображение ниже), используя базу данных Oracle через ODP.NET. После этого приложение снова остается без дела. LOH не падает. Вместо этого он продолжает расти по какой-то причине. Обратите внимание, что приложение бездействует. Он просто открыт на моем рабочем столе. Я даже не взаимодействую с ним.

enter image description here

Память продолжает увеличиваться (каждое изображение соответствует 1:15:00).

enter image description here

Через 2 с лишним часа оно внезапно уменьшается и через некоторое время снова начинает увеличиваться / уменьшаться (см. Ниже), как на первом изображении. Приложение все время бездействует. Что здесь происходит? Это утечка памяти? Я так не думаю. Мы профилировали приложение и ничего не смогли найти. Кроме того, LOH увеличивается без какой-либо активности. Нет открытой связи с базой данных Oracle. Может ли ODP.NET быть виновником?

enter image description here

1 Ответ

0 голосов
/ 01 августа 2011

Проблема определенно связана с ODP.NET.Если я отключаю пул соединений, проблема не проявляется.Для каждого соединения ODP.NET, кажется, создает 2 потока и с интервалом в 3 минуты (как видно на изображениях) ODP.NET выполняет некоторую служебную работу, но по какой-то причине выделяет память, которая не освобождается сразу.

Этолегко воспроизвести.Просто создайте простое приложение, которое при нажатии кнопки открывает соединение с базой данных Oracle и выполняет хранимую процедуру.Вы заметите образец первого изображения.Шаблон других изображений зависит от количества соединений, созданных приложением.

...