2012-04-05 3 views
0

Я ищу для продвижения по стратегии, которая обнаружит, когда система закончит работу и перезагрузите систему, используя Application.Restart();Предотвращение или прогнозирование исключения из памяти

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

Я не хочу переходить на webkit, потому что watin несовместим и Я не хочу использовать GeckoFX, потому что он не поддерживает поддержку javascript или jquery, и я не хочу использовать внешние экземпляры браузера, потому что встроенные элементы управления браузером являются частью моего интерфейса.

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

Я считаю, что могу это сделать и перезапустить свою автоматизацию с того места, где я остановился, и включить и выключить этот демон.

Может ли кто-нибудь помочь мне разобраться, как закодировать проверку памяти? Это должно быть легко. Я нашел эту ветку, но у меня есть некоторые проблемы с ее реализацией, не запуская ошибок ... может быть, другой подход будет лучше? How do you get total amount of RAM the computer has?

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

+3

OOM - это адресное пространство, а не физическая оперативная память. – CodesInChaos

+0

Напоминает, что я выбрал «select is broken» –

+0

Итак, вы действительно используете профилировщик или просто занимаетесь анализом памяти кресла, например, с помощью диспетчера задач? –

ответ

0

Asp.Net вытеснит материал из httpcache, когда он замечает, что он остается на доступной памяти, вы можете совершить поездку в эту часть рамки через Reflector и узнать, как она работает там ...

+2

@AdamMaras: Вы пропустили точку. Дело Андреаса состояло в том, что ASP каким-то образом выясняет, что память низкая, и поэтому вы можете перепроектировать ASP, чтобы выяснить, как это работает. Это не то, как я лично рекомендовал бы, чтобы кто-нибудь продолжал, заметьте. –

+0

Не могли бы вы просто программно установить экземпляр управления веб-браузером, чтобы предотвратить кеширование? (Я предполагаю, что кэширование httpcache и изображений/страниц во время сеанса браузера - это одно и то же) ... Чтение этой проблемы IE многие люди считают, что ползучесть памяти происходит из-за кэширования. Но, как и я, есть больше идиотов, чем люди, которые действительно знают, пытаясь решить проблему утечки памяти в веб-браузерах ... и без профайлера памяти вы, ребята, нелегко полагаете, что моя проблема связана с элементом управления веб-браузером для определенного ... – atwellpub

+0

@EricLippert Я не знаю, как это делает ASP, но я подозреваю, что вы можете это сделать только успешно, если у вас есть CLR. –

1

Это не имеет большого смысла. OOM происходит потому, что менеджер памяти CLR не мог выделить желаемый патрон памяти. Это может быть связано с рядом причин. Глядя на доступную оперативную память (которая совершенно неактуальна) или даже доступная память GC до того, как все распределения будут не гарантируют отсутствие OOM. Например. если у вас есть фрагментация LOH, общее количество доступных байтов может превысить потребность в распределении, но если CLR не может выделить единый непрерывный фрагмент памяти из свободного списка, запрос будет по-прежнему терпеть неудачу.

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