Как я могу избежать огромного количества программных ошибок страниц, генерируемых моим приложением C # .NET?

Я профилирую приложение C # .NET WinForms и заметил, что оно генерирует миллионы программных ошибок страницы и продолжает увеличиваться во время работы ...

Я знаю, что в .NET количество ошибок страниц, генерируемых приложением, обычно велико, но миллионы ошибок страниц кажутся слишком большими ... Похоже, что приложение вызвало состояние гонки с GC, возможно ли это?

Есть ли какой-нибудь известный плохо спроектированный фрагмент кода, который может привести к такой ситуации? Если нет в коде, есть ли какие-то скрытые настройки .NET framework, которые могут уменьшить количество ошибок страниц?

Можно ли избежать генерации все большего числа программных ошибок страницы?


person aleroot    schedule 25.11.2011    source источник
comment
Почему тебя это беспокоит? Сколько времени занимают эти неисправности? Вы понимаете, что мягкие ошибки не читаются с диска?   -  person John Saunders    schedule 26.11.2011
comment
Да, я знаю, что программные ошибки не читают диск, но их количество огромно и продолжает расти ... Это нормально? Я не думаю, что это нормальное поведение.   -  person aleroot    schedule 26.11.2011
comment
Нормальным поведением является игнорирование случайных чисел и сосредоточение внимания на решении проблем. Это проблема или просто случайное число, которое вы случайно заметили?   -  person John Saunders    schedule 26.11.2011
comment
Кажется, это не влияет на производительность, я не уверен. Однако просто любопытство ...   -  person aleroot    schedule 26.11.2011
comment
Неисправность программной страницы означает, что она есть, но недоступна. Например, общая память. Думаю, больше проблем, чем стоит пытаться решить, и вы, вполне вероятно, снизите производительность, если попробуете. Идея - освободить память, начать цепляться за нее и ...   -  person Tony Hopkinson    schedule 26.11.2011
comment
ДРУГИЕ запущенные приложения могут использовать много памяти и вызывать сброс страниц быстрее, чем обычно.   -  person Steve Wellens    schedule 26.11.2011
comment
Если он не сломан, не чините его.   -  person Seph    schedule 26.11.2011
comment
да, все ваши соображения разумны, и я благодарен за это, но я хочу понять, почему количество ошибок страниц так велико ...   -  person aleroot    schedule 27.11.2011


Ответы (1)


Я бы очень рекомендовал оставить эту штуку в покое, если это не проблема. Если у вас есть проблемы с производительностью - попробуйте изолировать код, который генерирует наибольшее количество ошибок страниц - вероятно, где-то вы используете большой объект, занимающий память.

Постарайтесь, чтобы ваш «небезопасный» код был как можно более изолированным и простым, т.е. инкапсулировать весь небезопасный код в классе или функции. Имейте в виду, что беспорядок в .NET GC может привести к ненужным осложнениям.

Проверьте эту статью на предмет небезопасного введения (она немного устарела, но все же верна): http://www.codeproject.com/KB/cs/unsafe_prog.aspx

Кроме того, вы можете увеличить время до сбора сборщика мусора, это может помочь

person Nitay    schedule 26.11.2011