2013-08-30 3 views
0

У меня есть приложение .NET WPF, которое использует библиотеку C++/CLI, которую мы написали, для управления видео через библиотеки Microsoft Media Foundation.Может ли графический драйвер вызвать утечку памяти в моем приложении?

При мониторинге счетчика производительности частных байтов на разных устройствах этот счетчик остается неизменным в течение нескольких недель. Однако в системе с графикой Intel GMA3650 этот счетчик производительности увеличивается с заметной и устойчивой скоростью, когда приложение работает (воспроизводит видео). Если я отключу Aero, переключившись на тему Windows 7 Basic, этот счетчик будет заметно лучше, хотя и с небольшим и устойчивым увеличением stll.

Код C++/CLI в основном выполняет основные функции управления видео транспорта, а также добавляет/удаляет видео сегменты из последовательности. Он также принимает снимок текущего видео через IMFSourceReader::ReadSample.

Похоже, что этот драйвер вызывает утечку памяти в моем приложении, но я даже не уверен, что это возможно. Все приложения уязвимы для утечек памяти в любых базовых библиотеках или библиотеках операционной системы, используемых ОС при выполнении приложения?

+0

Да, это может вызвать утечку памяти! –

ответ

1

Любая часть программного обеспечения, которая может выделять память в виртуальных адресных пространствах процессов, может вызвать утечку памяти. Драйверы могут выделять память таким образом через такие функции, как ZwOpenSection. Следовательно, они могут вызвать процесс утечки памяти.

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

+0

Но я профилировал свое приложение на многих устройствах без утечки (работает в течение нескольких недель), теперь на этом новом устройстве с этим графическим чипом внезапно возникла большая утечка. Наша база кода невелика, и практически весь код C++/CLI вызывается постоянно. Как один и тот же код может вызвать утечку на одном устройстве, но не в другом? Наш код не проверяет Aero вкл/выкл, так как можно отключить использование памяти памяти нашим кодом? – DaveO

+0

@DaveO, возможно, есть вызов API, который вы забываете назвать бесплатным методом, когда драйвер Intel выделяет память, а другие драйверы - нет. У этого были бы все симптомы, которые вы описываете. Примечание. Я не говорю, что это определенно ошибка в вашем приложении, я просто считаю, что это скорее. – JaredPar

+0

Как это происходит, проигрыватель Microsoft Windows Media также сбой и утечка памяти с помощью этого драйвера. – DaveO

 Смежные вопросы

  • Нет связанных вопросов^_^