Что вызывает сбой страницы и как их минимизировать? - PullRequest
5 голосов
/ 10 февраля 2010

При рассмотрении процесса в Обозреватель процессов , что это означает, если имеется несколько ошибок страницы? Приложение обрабатывает довольно много данных, и пользовательский интерфейс не очень отзывчив. Есть ли в коде оптимизации, которые могут уменьшить или устранить ошибки страниц? Будет ли увеличение физического ОЗУ системы иметь значение?

Ответы [ 3 ]

3 голосов
/ 11 февраля 2010

Также может быть полезно убедиться, что память, к которой обращаются после друг друга, находится рядом друг с другом (например, если у вас есть какие-то объекты, поместите их в массив), если эти объекты имеют много данных, которые используются очень редко поместите его в другой класс и сделайте так, чтобы первый класс имел ссылку на второй класс. Таким образом, большую часть времени вы будете использовать меньше памяти.

2 голосов
/ 10 февраля 2010

http://en.wikipedia.org/wiki/Page_fault

Увеличение физической памяти на вашем компьютере может привести к уменьшению количества сбоев страниц, хотя изменения в дизайне вашего приложения будут намного лучше, чем добавление оперативной памяти.В общем, наличие меньшего объема памяти и наличие вещей, к которым часто можно обращаться в одно и то же время, будут на одной странице, что уменьшит количество ошибок на странице.Также может быть полезно попытаться сделать все возможное с одним битом данных в памяти одновременно, чтобы вам не приходилось обращаться к нему много раз, что может вызвать сбои страниц (также называемые перебоями).

0 голосов
/ 11 февраля 2010

Вариантом дизайна было бы написать систему кэширования памяти, лениво создавая память (создавайте по требованию). такой кэш будет иметь набор предварительно выделенных блоков памяти, доступ к которым осуществляется по их размеру. Например, массив из N списков, каждый из которых имеет список M buffers.each, отвечает за перенос памяти в определенном диапазоне размеров. (например, из каждого списка вы получаете память в диапазоне 2 ^ i (i = 0..N-1). даже если вы хотите использовать меньше 2 ^ i, вы просто не используете дополнительную память в буфере , это будет компромиссом небольших потерь памяти, кеширования и уменьшения количества сбоев страниц.

другой вариант - использовать nedmalloc

удачи Лиор

...