Ошибки страницы при запуске приложения из Visual Studio

Я использую Visual Studio 2010 для написания и отладки небольшой программы. Проблема в том, что всякий раз, когда я запускаю приложение через Visual Studio 2010, процесс моего приложения вызывает ошибки страниц в диапазоне 100000 в секунду, что замедляет работу программы в 10 или более раз. Когда я запускаю сгенерированный исполняемый файл из файловой системы, после завершения запуска не возникают ошибки страницы. Это происходит с отладкой и выпускной сборкой (все допустимые оптимизации). Никакие исключения не выбрасываются.

Сама программа скомпилирована около 200 КБ и при выполнении содержит около 10 МБ данных с более чем 4 ГБ доступной памяти. Работают только основной поток и поток фреймворка ведения журнала. Данные загружаются один раз в начале, после чего только результаты сохраняются во вновь выделенной памяти и записываются в журнал в конце.

Не похоже, чтобы на диске было много активности, и монитор ресурсов Windows не указывает на серьезные сбои, в то время как диспетчер задач показывает постоянно увеличивающиеся числа. Я знаю, что при использовании IDE следует ожидать некоторой потери производительности, но это кажется несколько чрезмерным. Любой совет?

Изменить:

Примечание. Мне удалось сократить счет примерно до половины, сократив (де)распределение новой памяти.

Обозреватель процессов говорит: Обозреватель процессов

Похоже виноват отладчик. Если я не прикрепляю его, он ведет себя так, как ожидалось. Хотя мне все еще интересно, почему это вызывает такое большое количество ошибок страниц, что значительно замедляет все сборки.


person Darcara    schedule 30.07.2011    source источник
comment
пробовали ли вы использовать Process Monitor technet.microsoft.com/en-us/sysinternals/bb896645 чтобы увидеть, что происходит на самом деле?   -  person Mark Hall    schedule 30.07.2011
comment
Хм, невозможно запустить программу и не получить ошибки страниц. Это будет означать, что ваши наблюдения неверны. Сколько уведомлений об исключениях «первого шанса» вы видите в окне вывода?   -  person Hans Passant    schedule 30.07.2011
comment
@Mark: Спасибо, я этого не делал. Все, что я должен искать, потому что после запуска единственное, что я вижу, это записи в файл журнала. Особенно ничего, что было бы иначе, если бы он работал вне Visual Studio.   -  person Darcara    schedule 30.07.2011
comment
@Hans: Правда, в начале я получаю несколько ошибок страниц (~ 100000), но я пропустил это, потому что это нормально. Без исключений.   -  person Darcara    schedule 30.07.2011
comment
Вы хотите сказать, что большое количество ошибок страниц происходит только при запуске вашей программы в отладчике? Это происходит в релизной сборке в отладчике? На данный момент я предполагаю, что именно так работает отладчик.   -  person Mike    schedule 30.07.2011
comment
Да, я получаю около 100 тысяч ошибок страниц при запуске приложения, а затем около 100 тысяч каждую секунду во время работы. Происходит во всех сборках, но только при запуске из VS2010.   -  person Darcara    schedule 30.07.2011
comment
@Darcara есть как минимум два способа запустить проект в Visual Studio (с подключенным и не подключенным отладчиком). Если вы запускаете его без прикрепления, то какова частота отказов страницы?   -  person Mike    schedule 30.07.2011
comment
Каково использование общей памяти вашей программой? Обозреватель процессов расскажет вам об этом.   -  person Mike    schedule 30.07.2011
comment
У меня аналогичная проблема с приложением opengl. Ошибки страницы действительно влияют на производительность 3D-рендеринга. За исключением того, что моя проблема хуже, так как это происходит при обычном выполнении. При выполнении через визуальную студию рендеринг проходит намного плавнее.   -  person AareP    schedule 17.01.2012


Ответы (1)


Ошибки страницы — это нормально. Это часть процесса выделения памяти. Это не о чем беспокоиться.

person David Heffernan    schedule 30.07.2011
comment
Верно, но он получает 100 тысяч ошибок страниц в секунду в отладчике и гораздо меньшую скорость, когда не в отладчике. Чем это объясняется? - person Mike; 30.07.2011
comment
отладчик будет провоцировать отказы страниц - person David Heffernan; 30.07.2011
comment
Да, кажется. Но почему? Это имеет смысл в отладочных сборках, но я думал, что по крайней мере в релизных сборках их будет несколько меньше. - person Darcara; 30.07.2011
comment
Я никогда особо не задумывался о том, как работает отладчик. Вполне логично, что отладчик хотел бы, чтобы сбой страницы происходил на страницах, содержащих переменные, которые он хочет отслеживать. - person Mike; 30.07.2011
comment
@Darcara, отладчик все еще работает в релизных сборках, но не так хорошо из-за оптимизированного кода. - person Mike; 31.07.2011