Как вернуть неиспользованную память от "кучи" для больших объектов LOH из нескольких управляемых приложений?

Я также много боролся с различными вариантами того, как определить в Javascript, отображается ли страница на устройстве с сенсорным экраном или нет. ИМО, на данный момент не существует никакой реальной возможности правильно ее определить. Браузеры либо сообщают о событиях касания на настольных компьютерах (поскольку ОС может быть готова к касанию), либо некоторые решения работают не на всех мобильных устройствах.

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

Мое решение заключалось в рефакторинге вида, чтобы не требовалось всплывающей подсказки над кнопкой, и в итоге мне не нужно было обнаруживать сенсорное устройство из Javascript с помощью методов, которые все имеют их недостатки .

8
задан Gishu 24 June 2009 в 12:21
поделиться

3 ответа

Сначала я хотел бы сделать пояснение. - Предполагая, что вы запускаете приложение как 32-битное приложение, пространство VA, доступное для вашего процесса, составляет всего 2 ГБ, 3 ГБ, если вы включили переключатель большого адресного пространства, поэтому даже если у вас ОГРОМНЫЙ файл подкачки, не имеет значения, если вы 32-битный процесс, это имеет значение, если вы используете 64-битную версию, где у вас огромное адресное пространство.

  • Объект размером> 85000 байт выделяется на LOH, обратите внимание, что это 85000 байт , а не 85K, также могут измениться детали реализации. Теперь вернемся к вашему вопросу. Сборщик мусора отменит фиксацию сегментов LOH, которые не используются в двух ситуациях. 1- Когда давление памяти на машине высокое (~ 95-98%) 2- Когда он не может удовлетворить новые запросы на выделение, он декомпозит неиспользуемые страницы в LOH

, так что вы вернете память в одном из этих случаев. Тот факт, что вы нажимаете OOM до достижения лимита 2 ГБ, может означать, что у вас есть фрагментация VA, фрагментация VA происходит, когда у вас нет непрерывного адресного пространства VA для удовлетворения нового распределения, например, вы запрашиваете сегмент 8 КБ, а вы этого не делаете. В вашем виртуальном устройстве есть две последовательные страницы (при условии, что размер страницы 4 КБ)

вы можете использовать расширение отладчика! vamap в инструментах отладки для Windows, чтобы проверить это.

Надеюсь, это поможет Спасибо

5
ответ дан 5 December 2019 в 17:40
поделиться

Если LOH хочет сохранить память, это зависит от LOH - однако не забывайте, что OutOfMemoryException относится к каждому процессу, поскольку на самом деле жесткий диск ограничивающий фактор для виртуальной памяти. Эрик Липперт недавно написал об этом в своем блоге. Конечно, это не препятствует снижению производительности при подкачке страниц ...

3
ответ дан 5 December 2019 в 17:40
поделиться

Что ж, если у вас действительно есть такой шаблон распределения, вы можете переместить свои большие объекты в другой домен приложения - когда вы решите освободить все большие объекты, освободите домен приложения и кучу для этот домен приложения будет освобожден.

2
ответ дан 5 December 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: