Форум
.NET
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Nikolay_P_I, Вы писали: N_P>Здравствуйте, VladD2, Вы писали: N_P>>>1) ConcurrentGC работает начиная только с 1.1SP1 или же, как Рихтер писал - с самого начала ? VD>>Он работает по умолчанию во всех версиях дотнета. Просто регулировать его использование стало можно только после выхода сервиспаков и второй версии. Раньше управлять тем какой ЖЦ использовать можно было только если запускать рантайм дотнета программно (через COM). N_P>Понятно. Просто у Рихтера этот параметр в .exe.config рассматривается, когда еще и 1.1 не было. N_P>>>1.1) Возможна ли ситуация, когда работающий в параллельном потоке GC не успеет чистить память ? VD>>Очень теоритически. На практике это не является проблемой. N_P>Ну и хорошо. N_P>>>2) Когда начинается сборка мусора ? Учитывая фразу про "эвристику" ? VD>>В статье же сказано: VD>>[q]1. При очередном выделении памяти GC замечает, что превышен размер нулевого поколения. VD>>2. Приложение самостоятельно вызывает метод GC.Collect(). VD>>3. Нехватка памяти в ОС. VD>>[/q] VD>>В нормальных условиях работает в основном только пункт 1. N_P>Угу. С Gen0\1 ясно. Про "эвристику" было относительно сборки в Gen2. N_P>>>3) Как\чем снаружи посмотреть workset ? Память я посмотрю в Task Manager, а workset ? VD>>Task Manager-ом и посмотреть. Если не путаю, колонка "Mem usage" и есть WorkSet. N_P>Ээээ ? А что тогда "память" ? N_P>>>Надо именно для описываемого случая - посмотреть не стоит ли уменьшить в настройках размеры кэшей для предотвращения свопа. VD>>Для этого нужно наблюдать за динамикой. В разделе посвященном нехватки памяти как раз об этом говорится. Лучшим инструментом тут является Process Exlorer от www.sysinternals.com. N_P>Методика понятна - хочется синхронизации в терминах - какие именно колонки где смотреть ? N_P>>>4) Нельзя ли осветить работу LOH ? VD>>Да в общем-то про LOH много не скажешь. Но попробовать можно. :) N_P>>> Несколько раз поднимал вопрос о "premature Out of Memory Exception", как его обозвали зарубежные коллеги (если быстро выделять и переставать использовать большие объекты типа Char[10Mb+-1Mb] - будет нехватка памяти непонятно почему. Особенно на 1.1 без SP1). VD>>Это извесная проблема. Вроде как вылечена во втором фрэймворке. Данная ситуация зачастую возникает в следствии фрагментации [b]обычно[/b] кучи. Причем обычно это является следствием применения библиотек вроде сокетов. Они делают кучу pin-ов объектов, и при сборке мусора получается сильная фрагментация. Старные алгоритмы неумели разруливать эту ситуацию. Вроде как в 2.0 ввели повторное использование сегментов, что должно было устранить проблему или по крайней мере снизить ее влияние. N_P>Простейший пример с цикличным new Char[] все возрастающего объема - не должен иметь pin ? А оно там отлавливается стабильно. :-( VD>>Однако и в 1.1 можно было бороться с проблемой выделяя буферы в LOH или насильственно продвигая их во второе поколение. N_P>А как это ? N_P>>>Непонятно - как такое вообще может быть, если GC чистит память КАЖДЫЙ раз, когда ее не хватает. Если там эвристика - тогда понятно, но хотелось бы про нее знать. VD>>Память занимается сегментами. Ранее если сегмент второго поколения имел дыры внутри, то они никогда не заполнялись и не уплотнялись. Это могло приводить к ситуации когда при наличии моря памяти в системе ЖЦ нарывался на ее отсуствие (кончалась виртуалка). Выше я об этом уже говорил. N_P>Хмм... Не похоже. Я не утверждаю, но впечатление такое, что дело более тонкое - я не мог выделить Char[8307000]-Char[8390000], но Char[16000000] проходил. Кроме того - видимо, была зависимость от скорости - при долговременной работе с большими Char[] (обработка потока файлов) - все было нормально. N_P>Свопа, кстати, не было во всех случаях и MemUsage сбрасывался к 80Мб потом стабильно. VD>>Проявляется ли данная проблема под вторым фрэймворком? N_P>Хмм. Не совсем. С 1.1 пришлось уйти категорически - невозможность выделить 16Мб памяти - это нонсенс в наше время. N_P>В 1.1 SP1 это дело неплохо поправили и граница в районе 100-200Мб. В 2.0 Еще лучше - там около 500Мб - возможно, это уже предел.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …